一、用户注册

 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. LeetCode938. 二叉搜索树的范围和

    题目 1 class Solution { 2 public: 3 int sum = 0; 4 int rangeSumBST(TreeNode* root, int low, int high) ...

  2. LeetCode501.二叉搜索树中的众数

    题目,本题未做出,还有很多要学习 class Solution { public: vector<int>ans; int base,count,maxCount; void update ...

  3. Lakehouse: 统一数据仓库和高级分析的新一代开放平台

    1. 摘要 数仓架构在未来一段时间内会逐渐消亡,会被一种新的Lakehouse架构取代,该架构主要有如下特性 基于开放的数据格式,如Parquet: 机器学习和数据科学将被作为头等公民支持: 提供卓越 ...

  4. 学习Java第一天

    public 保证类名和文件名一致 关键字字母全小写,编辑器中有颜色标记 null空常量不能打印 变量就是内存中的存储空间 计算机中最小的存储单元时字节(byte) //1字节(B) = 8位(bit ...

  5. 解决maven中某些依赖无法下载,手动安装Maven依赖

    <!--先下载jar包,然后在仓库中手动安装,下面是遇到的两个例子--> <!--第一个--> mvn install:install-file -Dfile=D:\kaptc ...

  6. 从零搭建一个IdentityServer——项目搭建

    本篇文章是基于ASP.NET CORE 5.0以及IdentityServer4的IdentityServer搭建,为什么要从零搭建呢?IdentityServer4本身就有很多模板可以直接生成一个可 ...

  7. CUDA 介绍

    1. 介绍 1.1 GPU vs. CPU GPU 使用更多的晶体管进行数据处理,而不是数据缓存和流控制,因此可以提供高度的并行计算. GPU 可以通过计算来隐藏内存访问延迟,而不是依赖于大量的数据缓 ...

  8. 浅析鸿蒙中的 Gn 与 Ninja(一)

    目录: Ninja简介 make 的 3 个特性 举例说明Ninja 的用法 如何向构建工具 Ninja 描述构建图 后记 鸿蒙系统的编译构建是基于 Gn 和 Ninja 完成的,那么 Gn 和 Ni ...

  9. 在Golang中如何正确地使用database/sql包访问数据库

    本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结. 其实我也是一个新手,机缘巧合 ...

  10. http://golang.org/s/better-linker

    http://golang.org/s/better-linker The original linker was also simpler than it is now and its implem ...