一、用户注册

 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. Kubernetes 开船记-脚踏两只船:用 master 服务器镜像克隆出新集群

    自从2020年2月23日 园子全站登船 之后,我们一边感叹"不上船不知道,一上船吓一跳" -- kubernetes 比 docker swarm 强大太多,一边有一个杞人忧天的担 ...

  2. SAP IDES登陆的short dump终于不见了

    还记得这个IDES登陆的shortdump吗今天对内核从701_rel 升级到721,发现登陆的错误没了,看来721_rel内核支持的操作系统和数据库更多了,兼容性也更好了.

  3. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

  4. [Usaco2007 Jan]Telephone Lines架设电话线

    题目描述 FarmerJohn打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用.FJ的农场周围分布着N(1<=N<=1,000)根 ...

  5. flask文件下载

    后端的代码 # coding:utf-8 from flask import Flask app = Flask(__name__) @app.route("/upload", m ...

  6. H3C防火墙开启区域间互访

    配置ip和路由以及将端口放至Untrust之后,外网还是不通,需要以下命令 interzone policy default by-priority 或者下面: security-zone intra ...

  7. zabbix指定版本自动化安装脚本shell

    安装服务端zabbix 有时候要部署一个zabbix各种配置啊贼烦. #!/bin/sh #sleep 10 zabbix_version=4.2.5 ###这里你自定义版本,我要的是4.2.5 za ...

  8. 使用XML作为配置表,WinForm程序读取配置表来动态显示控件

    一.首先创建一个XML文件定义以下格式(uName:显示的中文字,uKey:代表控件的Name属性,ukeyValue:代表是否显示) 二.项目中定义一个通用类,来存放读取的值 这三个字段对应XML文 ...

  9. 关于redis搭建环境

    首先,window键+r 输入cmd进入dos命名窗口,我的redis是装在了d盘,so我得输入cd:或者d:进入d盘,cd\redis文件夹路径,这样的话,直接输入  redis-server -- ...

  10. 在HDFS中将文件从源路径移动到目的路径。

    import java.text.SimpleDateFormat; import java.util.Scanner; import org.apache.hadoop.fs.FSDataInput ...