首页 > 技术文章 > 路飞学城Python-Day114

pandaboy1123 2018-10-16 10:46 原文

120-基于用户认证组件的登陆验证信息存储
from django.shortcuts import render, HttpResponse, redirect
from django.contrib import auth
from django.contrib.auth.models import User
# Create your views here.
 
 
def login(request):
 
if request.method == 'POST':
user = request.POST.get('user')
pwd = request.POST.get('pwd')
# 如果认证成功,返回user对象,认证失败返回none
user = auth.authenticate(username=user, password=pwd)
if user:
# request.user创建当前登录对象
# 匿名登录对象是空值
auth.login(request, user)
return redirect('/index/')
else:
return render(request, 'login.html')
return render(request, 'login.html')
 
 
def index(request):
if not request.user.is_authenticated:
return redirect('/index/')
return render(request, 'index.html')
 
 
def logout(request):
auth.logout(request)
return redirect('/login/')
 
 
def reg(request):
if request.method == 'POST':
user = request.POST.get("user")
pwd = request.POST.get('pwd')
User.objects.create_user(username=user, password=pwd)
return redirect('/login/')
return render(request, 'reg.html')
121-基于用户认证组件的注销功能
122-基于用户认证组件的注册用户功能
使用 create_user 辅助函数创建用户:
 
1
2
from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email='')
使用 set_password() 来修改密码
 
1
2
3
user = User.objects.get(username='')
user.set_password(password='')
user.save 
 
用户需要修改密码的时候 首先要让他输入原来的密码 ,如果给定的字符串通过了密码检查,返回 True
匿名用户对象
id 永远为None。
username 永远为空字符串。
get_username() 永远返回空字符串。
is_staff 和 is_superuser 永远为False。
is_active 永远为 False。
groups 和 user_permissions 永远为空。
is_anonymous() 返回True 而不是False。
is_authenticated() 返回False 而不是True。
set_password()、check_password()、save() 和delete() 引发 NotImplementedError。
New in Django 1.8:
新增 AnonymousUser.get_username() 以更好地模拟 django.contrib.auth.models.User。
request.user是一个全局变量,模板中直接调用request.user就可以
123-基于用户认证组件的认证装饰器
124-中间件的实现流程
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。
Django的中间件的定义:
 
1
Middleware is a framework of hooks into Django’s request/response processing. <br>It’s a light, low-level “plugin” system for globally altering Django’s input or output.
 
如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。
可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现
125-中间件的process_request和process_response方法
中间件的作用在于大部分视图的功能可以交给中间件去做
126-中间件之process_view方法
127-中间件之proccess_exception
128-中间件之应用

推荐阅读