一、用户注册

 1 '''
2 注册的表单模型
3 forms.py 的例子
4 '''
5
6 from django import forms #表单功能
7 from django.contrib.auth.models import User
8 class RegForm(forms.Form):
9 '''
10 用户注册表单
11 '''
12 #用户
13 username = forms.CharField(label='用户名',max_length=30,min_length=3,widget=forms.TextInput(
14 attrs={'class':'form-control','placeholder':'请输入用户名'}))
15 #邮箱
16 email = forms.EmailField(label='邮箱',widget=forms.EmailInput(
17 attrs={'class':'form-control','placeholder':'请输入邮箱'}))
18 #密码
19 password = forms.CharField(label='密码',min_length=8,widget=forms.PasswordInput(
20 attrs={'class':'form-control','placeholder':'请输入密码'}))
21 #再次输入密码
22 password_again = forms.CharField(label='再次输入密码',min_length=8,widget=forms.PasswordInput(
23 attrs={'class':'form-control','placeholder':'请再次输入密码'}))
24
25
26 def clean_username(self):
27 '''
28 清洗输入的用户名
29 :return: 清洗后的用户名
30 '''
31 username = self.cleaned_data['username']
32 if User.objects.filter(username=username).exists():
33 raise forms.ValidationError('用户名已存在')
34 return username
35
36
37 def clean_email(self):
38 '''
39 清洗输入的邮箱
40 :return: 清洗后输入的邮箱
41 '''
42 email = self.cleaned_data['email']
43 if User.objects.filter(email=email).exists():
44 raise forms.ValidationError('邮箱已存在')
45 return email
46
47
48 def clean_password_again(self):
49 '''
50 清洗输入的密码
51 :return: 输出对比一致的密码
52 '''
53 password = self.cleaned_data['password']
54 password_again = self.cleaned_data['password_again']
55 if password != password_again:
56 raise forms.ValidationError('两次输入的密码不一致')
57 return password

forms.py

 1 '''
2 注册的函数模型
3 views.py样子
4 '''
5 from django.shortcuts import redirect,render
6 from django.contrib import auth #django标准的权限管理模型
7 from django.urls import reverse #反向解析
8 from django.contrib.auth.models import User
9 from .forms import RegForm
10
11 def register(request):
12 '''
13 用户注册相关功能处理
14 :param request:请求对象
15 :return: 注册充公返回首页,失败返回注册表单
16 '''
17 if request.method == 'POST':
18 reg_form = RegForm(request.POST)
19 if reg_form.is_valid():
20 username = reg_form.cleaned_data['username']
21 email = reg_form.cleaned_data['email']
22 password = reg_form.cleaned_data['password']
23 user = User.objects.create_user(username=username,email=email,password=password)
24 user.save()
25 user = auth.authenticate(username,password)
26 auth.login(request,user)
27 return redirect(request.GET.get('from',reverse('blog:home')))
28 else:
29 reg_form = RegForm()
30 context = {'reg_form':reg_form}
31 return render(request,'user/register.html',context)

views.py

<div class="col-xs-11 col-sm-5 col-lg-4 col-sm-offset-4 blog-border side-info">
<h4>欢迎注册</h4>
<form action="" method="POST">{% csrf_token %} {% for field in reg_form %}
{# label去冒号 #}
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field }}
<p class="text-danger">{{ field.errors.as_text }}</p>
{% endfor %}
{# 错误信息标红 #}
<span class="pull-left text-danger">{{ login_form.non_field_errors }}</span>
{# <span>用户名:</span> #}
{# <input type="text" name="username"> #}
{# <span>密码:</span> #}
{# <input type="password" name="password"> #}
<span style="font-weight: bold;">已有帐号?<a style="color: #337ab7;" href="{% url 'user:login' %}">点击登录</a></span>
<input class="btn btn-primary pull-right" style="margin-bottom: 0.5em" type="submit" value="注册">
</form>
{% if user.is_authenticated %}
<script type="text/javascript">
window.location.href = '/';
</script>
{% else %} {% endif %}
</div>

二、用户登录

 1 '''
2 用户登录表单模型
3 forms.py 的例子
4 '''
5 from django import forms #表单功能
6 from django.contrib.auth.models import User
7 from django.contrib import auth
8 class LoginForm(forms.Form):
9 '''
10 用户登录
11 '''
12 username = forms.CharField(label='用户名', max_length=30, min_length=3, widget=forms.TextInput(
13 attrs={'class': 'form-control', 'placeholder': '请输入用户名'}))
14 password = forms.CharField(label='密码', min_length=8, widget=forms.PasswordInput(
15 attrs={'class': 'form-control', 'placeholder': '请输入密码'}))
16
17
18 def clean(self):
19 '''
20 清洗输入不合格的表单
21 :return: 清洗后的数据
22 '''
23 username = self.cleaned_data['username']
24 password = self.cleaned_data['password']
25 user = auth.authenticate(username,password)
26 if user is None:
27 raise forms.ValidationError('用户名或密码错误')
28 else:
29 self.cleaned_data['user'] = user
30
31 return self.cleaned_data

forms.py

 1 '''
2 用户登录函数模型
3 views.py样子
4 '''
5 from django.shortcuts import redirect,render
6 from django.contrib import auth #django标准的权限管理模型
7 from django.urls import reverse #反向解析
8 from .forms import LoginForm
9 def login_m(request):
10 '''
11 用户登录处理逻辑
12 :param request:
13 :return: 登录视图
14 '''
15 if request.method == 'POST':
16 login_form = LoginForm(request.POST)
17 user = login_form.cleaned_data['user']
18 auth.login(request,user)
19 referer = request.GET.get('from',reversed('blog:blog'))
20 return redirect(referer)
21 else:
22 login_form = LoginForm()
23
24 context = {'login_form':login_form}
25 return render(request,'user/login.html',context)

views.py

 1 <div class="col-xs-11 col-sm-5 col-lg-4 col-sm-offset-4 blog-border side-info">
2 <h4>用户登录</h4>
3
4 <form action="" method="POST">
5 {% csrf_token %}
6 {% for field in login_form %}
7 <label for="{{ field.id_for_label }}">{{ field.label }}</label>
8 {{ field }}
9 <p class="text-danger">{{ field.errors.as_text }}</p>
10 {% endfor %}
11 {# 错误信息标红 #}
12 <span class="pull-left text-danger">{{ login_form.non_field_errors }}</span>
13 {# <span>用户名:</span> #}
14 {# <input type="text" name="username"> #}
15 {# <span>密码:</span> #}
16 {# <input type="password" name="password"> #}
17 <span style="font-weight: bold;">没有帐号?<a style="color: #337ab7;" href="{% url 'user:register' %}">点击注册</a></span>
18 <input class="btn btn-primary pull-right" style="margin-bottom: 0.5em" type="submit" value="登录">
19 </form>
20
21 {% if user.is_authenticated %}
22 <script type="text/javascript">
23 window.location.href = '/';
24 </script>
25 {% else %}
26 {% endif %}
27 </div>

Django用户注册、登录的更多相关文章

  1. Django实现用户注册登录

    学习Django中:试着着写一个用户注册登录系统,开始搞事情 =====O(∩_∩)O哈哈~===== ================= Ubuntu python 2.7.12 Django 1. ...

  2. 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销

    第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...

  3. 基于xml的用户注册登录案例

    用户注册登录 要求:3层框架,使用验证码 1        功能分析 l  注册 l  登录 1.1 JSP页面 l  regist.jsp 注册表单:用户输入注册信息: 回显错误信息:当注册失败时, ...

  4. express框架+jade+bootstrap+mysql开发用户注册登录项目

    完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...

  5. Django介绍、安装配置、基本使用、Django用户注册例子

    Django介绍     Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站     DjangoMTV的思想         没有controller ...

  6. 用户注册登录系统 V2.0

    # 准备空列表 users = [] # 准备当前在线用户 online_user = {} while True: # 打印系统提示 print("欢迎使用 用户注册登录系统V2.0&qu ...

  7. redis实践:用户注册登录功能

    本节将使用PHP和Redis实现用户注册登录功能,下面分模块来介绍具体实现方法. 1.注册 需求描述:用户注册时需要提交邮箱.登录密码和昵称.其中邮箱是用户的唯一标识,每个用户的邮箱不能重复,但允许用 ...

  8. 超全面的JavaWeb笔记day14<用户注册登录>

    案例:用户注册登录 要求:3层框架,使用验证码 1 功能分析 l 注册 l 登录 1.1 JSP页面 l regist.jsp Ø 注册表单:用户输入注册信息: Ø 回显错误信息:当注册失败时,显示错 ...

  9. Lumen实现用户注册登录认证

    Lumen实现用户注册登录认证 前言 Lumen是一个基于Laravel的微框架,号称是以速度为生.截用Lumen官网的一段,号称是比silex和slim还要快. 本文将用Lumen来实现一个完整的用 ...

  10. python 容器 用户注册登录系统

    1. 列表和普通变量有什么区别 列表是数据类型,普通变量是用来存储数据的 可以把列表赋值给普通变量 2.存在列表 a = [11, 22, 33], 如何向列表中添加(增)新元素 44 a.appen ...

随机推荐

  1. 【MySQL】一台服务器上搭建两个mysql节点

    环境: CentOS 6.8  memory:1G Mysql 5.7 二进制安装包 1.安装相关的环境包 yum -y install gcc glibc libaio libstdc++ libs ...

  2. 【Linux】fdisk -l发现有加号"+"

    今天分区不够了,打算扩下分区,想起当时创建机器的时候还有大约80多个G没有用,今天打算重新利用上 就用了fdisk /dev/sda 创建了两个分区,但是发现分区下面有加号,感到而别的困惑 最后在很多 ...

  3. libnum报错问题解决

    之前在使用python libnum库时报错 附上报错内容 Traceback (most recent call last) : File" D:/python file/ctf/RSA共 ...

  4. logging模块简单用法

    logging模块功能比较多,但一般情况下使用其简单功能就已经足够了. 最简单的用法如下: import logging logging.baiscConfig(level=logging.DEBUG ...

  5. 记录Js动态加载页面.append、html、appendChild、repend添加元素节点不生效以及解决办法

    今天再优化blog页面的时候添加了个关注按钮和图片,但是页面上这个按钮和图片时有时无,本来是搞后端的,被这个前端的小问题搞得抓耳挠腮的! 网上各种查询解决方案,把我解决问题的艰辛历程分享出来,希望大家 ...

  6. bootstrap弹出层嵌套弹出层后文本框不能获得焦点输入

    如图上 我从页面打开一个bootstrap弹出层 然后又在 bootstrap弹出层的基础上打开一个layui的弹出层  打开后发现文本域获取不到焦点不能输入内容 而该弹出层显示的层级体现出来了 按钮 ...

  7. linux下安装nacos

    一.安装 1.下载安装包: https://github.com/alibaba/nacos/releases 2.解压 : tar -xzvf nacos-server-1.2.1.tar.gz 3 ...

  8. Linux下安装配置rocketmq (单个Master、双Master)

    一.环境: centos7(2台虚拟机):192.168.64.123:192.168.64.125 apache-maven-3.2.5(官网要求maven版本是3.2.x,版本不同,编译rocke ...

  9. 微信小程序 发送模板消息的功能实现

    背景 - 小程序开发的过程中,绝大多数会满足微信支付 - 那么,作为友好交互的体现,自然就会考虑到支付后的消息通知咯 - 所以,我的小程序项目也要求完成这个效果,so.分享一下自己的实现步骤,以方便道 ...

  10. ldf和mdf文件怎么还原到sqlserver数据库

    1.把mdf文件和ldf文件拷贝到数据库的默认路径C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA里:2.在sq ...