摘要

django框架本身自带有登录注册,也可以自己写登录注册,下面将介绍这这2种方式实登录注册

一、自己写登录注册登出

1.注册regist

注册采用的是form表单,提交到数据库,在登录的时候,查询数据看,看用户有没有注册,如果用户没有注册,则返回注册页面注册

(1)models.py文件里创建相关的字段: 用户名字/用户密码/cookies携带的ticket

from django.db import models# Create your models here.class Users(models.Model):u_name = models.CharField(max_length=10)u_password = models.CharField(max_length=255)u_ticket = models.CharField(max_length=30, null=True)class Meta:db_table = 'day51_user'

(2)urls.py 配置相关路由

from django.conf.urls import url
from uauth import views
urlpatterns = [url(r'^regist/', views.regist),url(r'^login/', views.login),url(r'^logout', views.logout)
]

(3)views.py 书写regist方法

导入相关的包,在regist,login,logout都会使用到

import random
import  time
from django.contrib import auth
from django.contrib.auth.hashers import make_password,check_password
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render
from django.core.urlresolvers import reverse
# Create your views here.
from uauth.models import Users

如果用户请求regist方法,则直接跳转到相关的html页面。

如果用户在html页面点击了post按钮,对密码进行加密后,将数据提交到数据库,并返回登录login页面。

获得post提交的表单文字,使用request.POST.get(' ')

def regist(request):if request.method == 'GET':return render(request, 'day6_regist.html')if request.method == 'POST':# 注册name = request.POST.get('name')password = request.POST.get('password')# 对密码进行加密password = make_password(password)Users.objects.create(u_name=name, u_password=password)return HttpResponseRedirect('/uauth/login/')

编写regist的提交表单, method方法选择'POST'

文件目录在templates下[图片上传中...(image.png-cc7763-1526105439415-0)]

{%csrf_token%}是针对提交的时候csrf跨域错误

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册页面</title>
</head>
<body>
<form action="" method="POST">{% csrf_token %}注册姓名:<input type="text" name="name">注册密码:<input type="password" name="password"><input type="submit" value="提交">
</form>
</body>
</html>

2.登录login

(1)配置路由urls.py, 与注册的时候一样的操作

(2)配置views.py, 编写login方法

如果是GET请求,则跳转到登录的html界面中

def login(request):if request.method == 'GET':return render(request, 'day6_login.html')

如果是POST请求,则将获得的用户密码与数据库的用户密码进行比较。如果相同,就赋值一个ticker到浏览器上,将ticket存入数据库中,这样后续的浏览器操作只需判断ticket是否正确就好,如果错误,返回登录界面

知识点

绑定cookie命令: set_cookie

查询一个用户是否存在:exists()

def login(request):if request.method == 'GET':return render(request, 'day6_login.html')if request.method == 'POST':# 如果登录成功,绑定参数到cookie中,set_cookiename = request.POST.get('name')password = request.POST.get('password')# 查询用户是否在数据库中if Users.objects.filter(u_name=name).exists():user = Users.objects.get(u_name=name)if check_password(password, user.u_password):# ticket = 'agdoajbfjad'ticket = ''for i in range(15):s = 'abcdefghijklmnopqrstuvwxyz'# 获取随机的字符串ticket += random.choice(s)now_time = int(time.time())ticket = 'TK' + ticket + str(now_time)# 绑定令牌到cookie里面# response = HttpResponse()response = HttpResponseRedirect('/stu/index/')#max_age 存活时间(秒)response.set_cookie('ticket', ticket, max_age=10000)# 存在服务端user.u_ticket = ticketuser.save() #保存return responseelse:# return HttpResponse('用户密码错误')return render(request, 'day6_login.html', {'password': '用户密码错误'})else:# return HttpResponse('用户不存在')return render(request, 'day6_login.html', {'name': '用户不存在'})

登录相关的html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录页面</title>
</head>
<body>
<form action="" method="POST">{% csrf_token %}登录姓名:<input type="text" name="name">登录密码:<input type="password" name="password"><input type="submit" value="提交">
</form>
</body>
</html>

相关的数据库

补充说明:如何在主页中判断ticket

知识点:获得浏览器cookie携带的ticket: request.COOKIES.get('ticket')

这只能判断一个网页需不需要进行判断验证,如果需要很多网页进行验证,这是需要采用中间件,这个稍候会涉及到

def index(request):if request.method == 'GET':# 获取所有学生信息ticket = request.COOKIES.get('ticket')if not ticket:return HttpResponseRedirect('/uauth/login/')if Users.objects.filter(u_ticket=ticket).exists():stuinfos = StudentInfo.objects.all()return render(request, 'index.html', {'stuinfos': stuinfos})else:return HttpResponseRedirect('/uauth/login/')

3.登出系统

实现登出目的,选择删除数据库中的ticket:delete_cookie

登出过后,自动跳转到登录界面

def logout(request):if request.method == 'GET':# response = HttpResponse()response = HttpResponseRedirect('/uauth/login/')response.delete_cookie('ticket')return response

4.中间件middleware

应用:在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

  • 中间件的5个方法:

process_request(self,request) :当用户发起请求的时候会依次经过所有的的中间件,这个时候的请求是process_request :

process_view(self, request, callback, callback_args, callback_kwargs) :进入views函数, 执行process_view

process_template_response(self,request,response) : 只有当views函数中返回的对象中具有render方法,是就会直接process_template_responseprocess

process_exception(self, request, exception) : 当views的函数中出现错误时,就会执行process_exception方法

process_response(self, request, response)

:views函数处理后,在依次穿过中间件,这个时候是process_response,最后返回给请求者

  • 中间件的运行流程

5. 使用中间件完成登录的验证

中间件return None 或什么都不返回的时候表示什么都不做,跳过这一个过程

配置中间件,实现登录的验证

(1)配置settings.py

1) 在主工程文件下创建一个utils文件,

在utils里: a. 创建中间件文件(名字自己取) b.创建一个工程文件 __init__.py

image.png

2)settings.py配置

在MIDDILEWARE里添加相关的文件路径

3) 配置相关的中间件文件

from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixinfrom uauth.models import Users
from stu.models import Countaddstuclass AuthMiddleware(MiddlewareMixin):def process_request(self, request):# 统一验证登录# return none 或者 不写return才会继续往下执行, 不需要执行if request.path == '/uauth/login/' or request.path == '/uauth/regist/':return Noneticket = request.COOKIES.get('ticket')if not ticket:return HttpResponseRedirect('/uauth/login/')users = Users.objects.filter(u_ticket=ticket)if not users:return HttpResponseRedirect('/uauth/login/')
# 将user赋值在request请求的user上,以后可以直接判断user有没有存在
# 备注,django自带的有user值request.user = users[0]

6. 至此,自己建造的登录验证系统已经完成

更多Python视频、源码、资料加群725638078免费获取

二、 django自带的登录验证系统

自带的登录验证系统中不需要自己手动的设置ticket

1.settings.py文件中配置没登录的跳转页面

LOGIN_URL = '/uauth/dglogin'

2.urls.py中配置相关路由

from django.conf.urls import url
from uauth import views
urlpatterns = [url(r'dglogin/', views.dglogin),url(r'^dgregist/', views.dgregist),url(r'^dglogout/', views.dglogout)
]

3. views.py导入相关的库文件

from django.contrib import auth
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render

4.views.py文件中书写注册dgregist方法

from django.contrib.auth.models import User
def dgregist(request):if request.method == 'GET':return render(request, 'day6_regist.html')if request.method == 'POST':name = request.POST.get('name')password = request.POST.get('password')User.objects.create_user(username=name, password=password)return HttpResponseRedirect('/uauth/dglogin/')

5. views.py文件中书写注册dglogin方法

def dglogin(request):if request.method == 'GET':return render(request, 'login.html')if request.method == 'POST':name = request.POST.get('name')password = request.POST.get('password')# 验证用户名和密码,通过的话,返回User对象user = auth.authenticate(username=name, password=password)if user:auth.login(request, user)return HttpResponseRedirect('/stu/index/')else:return render(request, 'index.html')

6. 在app的urls.py中设置验证require

from django.conf.urls import url
from django.contrib.auth.decorators import login_required
from stu import views
urlpatterns = [url(r'addstu/', login_required(views.addStu), name='add'),url(r'index/', login_required(views.index)),
]

7.登出dglogout

def dglogout(request):if request.method == 'GET':auth.logout(request)

django的登录注册系统相关推荐

  1. java注册登录客户端_GitHub - a-voyager/LoginSystem_Client: 登录注册系统(桌面客户端)——Java课程实践...

    基于HTTP协议和MySQL的多平台登录注册系统 摘要 基于HTTP协议和MySQL的多平台登录注册系统主要用于模拟演示互联网中常见的BS/CS模式登录注册系统.目前网络互访一般基于两种协议HTTP协 ...

  2. WordPress注册登录注册系统插件

    简介: WordPress的登录注册系统有很多问题,不符合一般用户的使用习惯,举例来说: (1)注册时候无法自行设置登录密码,系统将自行生成一段非常复杂的密码给用户,根本无法记忆,只能再次重置密码. ...

  3. Python实现登录注册系统

    登录注册系统 1 数据持久化 2 步骤 3 代码 1 数据持久化 因为需要下一次运行程序的时候可以使用上一次注册的账号,所以已经注册过的账号需要持久化. 2 步骤 1.确定持久化对象:所有已经注册过的 ...

  4. Android+Blockly大作业(含登录注册系统、碎片式浏览、Blockly设计)

    此次大作业实现功能包括: 1.数据库的搭建 2.登录注册界面及主界面界面的设计 3.碎片的应用 4.webBlockly的嵌套 我曾在不同活动调用数据库的bug.数据库的检索和碎片的实现上花了很多时间 ...

  5. 【JAVA】网页版登录注册系统2.0

    前言 JAVA实现网页的登录与注册2.0版 一.环境的搭建 导入1.0版本的项目Java实现网页版登录注册系统-Java文档类资源-CSDN文库可参考[JAVA]网页版登录注册系统_Lx_Hy_的博客 ...

  6. 【JAVA】网页版登录注册系统

    目录 前言 一.环境的搭建 二.功能实现 1.登录功能 2.注册功能 [注意] 总结 前言 JAVA实现网页的登录与注册 一.环境的搭建 1.创建Maven Web工程,参考[JAVA]Web服务器- ...

  7. python 搭建登陆系统,用Python连接操作MySQL数据库,做一个简单的用户登录注册系统...

    我们可以很容易地用Python实现一个用户登录系统,相信这即使是对编程新手来说也是小菜一碟. 作为Python的小萌新,今天我想记录下来的是如何实现一个连接了MySQL数据库的用户登录注册系统,它的效 ...

  8. WordPress登录注册系统的优化

    WordPress的登录注册系统有很多问题,不符合一般用户的使用习惯,举例来说: (1)注册时候无法自行设置登录密码,系统将自行生成一段非常复杂的密码给用户,根本无法记忆,只能再次重置密码. (2)用 ...

  9. Java 登录注册系统 【java基础案例教程 案例2-6】

    案例要求 编写程序实现简单的登录注册系统.程序包括以下4个功能. 1)登录功能,用户输入正确的账号密码可成功登录 2)注册功能,输入用户名和密码进行注册 3)查看功能,查看所有的用户名和密码 4)退出 ...

最新文章

  1. [微信小程序]物流信息样式加动画效果(源代码附效果图)
  2. js邮箱正则表达式的使用
  3. 【小游戏】有意思的小游戏集合
  4. linux日志文件备份,linux配置文件、日志文件全备份
  5. 如何从ngrx store中获取Observable对象
  6. Java中的功能性FizzBu​​zz Kata
  7. Linux 等待进程结束 wait() 和 waitpid()
  8. c#使用CefSharp开发winform——环境搭建
  9. 【redis】redis实用Utils
  10. android textview密文,TextView 明密文处理
  11. wps怎么将字体变得很大_wps如何将字体无限放大
  12. 【实用开发工具】将BAT脚本打包成exe可执行文件
  13. 105个上榜!2020年工业互联网试点示范项目名单公布
  14. 如何通过AWS VPC Peering云服务,解决公共云的局限性?
  15. Copy-on-Write模式:写时复制
  16. 杭州逆行崩溃小伙首度回应
  17. 【Fuzzy】模糊专家系统(1)
  18. 本周最新文献速递20211205
  19. win10导入iphone手机中的照片和视频出错:发生了一些问题,文件可能未导入
  20. P2905 [USACO08OPEN]农场危机Crisis on the Farm-dp

热门文章

  1. strpos() 返回字符串在另一字符串中第一次出现的位置(区分大小写)stripos()(不区分大小写)
  2. 【推推】:列表模块原型图
  3. react中enter键的使用判断条件
  4. jQuery事件动画
  5. R星服务器显示云备份失败,【gta5云存档同步失败】gta5云端存档同步发生错误
  6. UI自动化测试-数据驱动(ddt)
  7. vi/vim 总结 | emacs evil 使用教程
  8. 卤素测试发型软件,卤素测试项目及标准要求
  9. weui uploader php,weui表单 uploader上传组件使用教程
  10. 域名ns查询接口php,域名NS查询网址