2020年10月27日星期二

Django——auth

一、auth组件介绍

可以实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,内置了强大的用户认证系统--auth,它其实就是一个app

二、内置属性方法

注意:在用属性方法前,必须进行数据库迁移,两条命令

1. authenticate用户认证  

settings.py  基本路径配置好

urls.py注意每次配好路由

login.html 

ps : {% csrf_token %} 用上它不用注释csrf那个中间件了
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>登录</title></head><body><form action="" method="post"> {% csrf_token %}  <p>用户名:<input type="text" name="name"></p> <p>密码:<input type="password" name="password"></p> <p><input type="submit" value="提交"></p></form></body></html>

views.py

from django.shortcuts import render, HttpResponse, redirect#from django.contrib.auth.models import Userfrom django.contrib import authdef login(request): if request.method=='GET':  return render(request,'login.html') else:  name=request.POST.get('name')  password=request.POST.get('password') # 明文  ## 方案行不通,密码是密文的,永远匹配不成功  # user=User.objects.filter(username=name,password=password)  ## 使用此方案,有两个注意点  ## 第一个参数必须是request对象  ##必须用username和password不能用其他名,看源码  user=auth.authenticate(request,username=name,password=password)  if user:   return HttpResponse('登录成功')  else:   return HttpResponse('用户名或密码错误')

2.login

# 调用auth后,表示用户登录了# 1 存了session# 2 以后所有的视图函数,都可以使用request.user,它就是当前登录用户auth.login(request,user)

代码:

urls.py略

order.html   这里只是测试下

<body>{{ request.user.username }}的订单页面,买了好多东西</body>

index.html

<body>{{ request.user.username }}登录了</body>

views.py

from django.shortcuts import render, HttpResponse, redirectfrom django.contrib.auth.models import User# 不管是否登录,都能访问
def index(request):
return render(request, 'index.html')
def order(request):
   print(request.user) return render(request, 'order.html')## 用户登录成功后存sessionfrom django.contrib import authdef login(request): if request.method=='GET': return render(request,'login.html') else: name=request.POST.get('name') password=request.POST.get('password') # 明文 ## 此方案行不通,密码是密文的,永远匹配不成功 # user=User.objects.filter(username=name,password=password) ## 使用此方案 ## 第一个参数必须是request对象 ##username和password user=auth.authenticate(request,username=name,password=password) if user: # 调用auth,表示用户登录了 # 1 存了session # 2 以后所有的视图函数,都可以使用request.user auth.login(request,user)
       return HttpResponse('登录成功') else: return HttpResponse('用户名或密码错误')

3.logout

urls.py略

views.py

def logout(request): # 后续再访问视图函数,就没有当前登录用户了request.user(匿名用户AnonymousUser) auth.logout(request) return redirect('/index/')

oeder.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>订单页面</title></head><body>{{ request.user.username }}的订单页面,买了好多东西<br><hr><a href="https://www.cnblogs.com//logout/">点我退出</a></body></html>

 

4.is_authenticated

# is_authenticated 返回True或者False,判断用户是否登录# 用在视图中views.pyif request.user.is_authenticated: print('用户登录了')else: print('用户没有登录,匿名用户')# 用在模板中index.html{% if request.user.is_authenticated %}{{ request.user.username }} 登录了 {% else %} <a href="https://www.cnblogs.com//login/">滚去登录</a>{% endif %}

5.login_requierd

1 它是个装饰器, 装饰在视图函数上,只要没有登录,就进不来# 必须登录后才能访问@login_required(login_url='/login/') #意思是如果没有登录就重定向到/login/

代码:

from django.shortcuts import render, HttpResponse, redirectfrom django.contrib import authfrom django.contrib.auth.decorators import login_requireddef login(request): if request.method=='GET':  return render(request,'login.html') else:  name=request.POST.get('name')  password=request.POST.get('password') # 明文  ## 方案行不通,密码是密文的,永远匹配不成功  # user=User.objects.filter(username=name,password=password)  ## 使用此方案  ## 第一个参数必须是request对象  ##username和password  user=auth.authenticate(request,username=name,password=password)  if user:   # 调用auth,表示用户登录了   # 1 存了session   # 2 以后所有的视图函数,都可以使用request.user   auth.login(request,user)   url=request.GET.get('next')   if url:    return redirect(url)   else:    return redirect('/index/')  else:   return HttpResponse('用户名或密码错误')# 必须登录后才能访问@login_required(login_url='/login/')def order(request): print(request.user) # 如何实现的? print(request.user.username) # AnonymousUser if request.user.is_authenticated:  print('用户登录了') else:  print('用户没有登录,匿名用户') return render(request, 'order.html')

6.create_user

# 使用内置的create_user或者create_superuser方法 superuser权限跟user不同user=User.objects.create_user(username=name,password=password)# user=User.objects.create_superuser(username=name,password=password)

代码:

views.py

from django.contrib.auth.models import Userdef register(request): if request.method == 'GET':  return render(request, 'register.html') else:  name = request.POST.get('name')  password = request.POST.get('password')  # 注册用户(有问题,密码是明文)  # user=User.objects.create(username=name,password=password)  # print(user)  # 使用内置的create_user或者create_superuser方法  user = User.objects.create_user(username=name, password=password)  # user=User.objects.create_superuser(username=name,password=password)  return redirect('/login/')

register.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>注册</title></head><body><form action="" method="post"> {% csrf_token %} <p>用户名:<input type="text" name="name"></p> <p>密码:<input type="password" name="password"></p> <p>确认密码:<input type="password" name="re_password"></p> <p><input type="submit" value="提交"></p></form></body></html>

7.check_password 校验密码

## 有了用户,校验密码是否正确# 先获取到用户对象user = User.objects.filter(username=name).first()# 判断密码是否正确flag=user.check_password(password)

代码:

def login(request): if request.method == 'GET':  return render(request, 'login.html') else:  name = request.POST.get('name')  password = request.POST.get('password') # 明文  # 先获取到用户对象  user = User.objects.filter(username=name).first()  # 判断密码是否正确  flag = user.check_password(password)   if flag:   auth.login(request, user)   url = request.GET.get('next')   if url:    return redirect(url)   else:    return redirect('/index/')  else:   return HttpResponse('用户名或密码错误')

8.set_password 修改密码

views.py

from django.contrib.auth.models import User

def change_password(request): if request.method == 'GET': return render(request, 'change_pwd.html') else: old_pwd = request.POST.get('old_pwd') new_pwd = request.POST.get('new_pwd') re_new_pwd = request.POST.get('re_new_pwd')#注意要核验,不然出bug if request.user.check_password(old_pwd): # 密码正确再修改 request.user.set_password(new_pwd) # 一定要记住保存(****) request.user.save() return redirect('/login/') else: return HttpResponse('原来密码错误')

index.html

<body>{% if request.user.is_authenticated %} {{ request.user.username }} 登录了 <br> <a href="https://www.cnblogs.com//change_pwd/">修改密码</a>{% else %} <a href="https://www.cnblogs.com//login/">滚去登录</a>{% endif %}</body>

change_pwd.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>修改密码</title></head><body><form action="" method="post">  {% csrf_token %} <p>原密码:<input type="password" name="old_pwd"></p> <p>新密码:<input type="password" name="new_pwd"></p> <p>确认密码:<input type="password" name="re_new_pwd"></p> <p><input type="submit" value="提交"></p></form></body></html>

 

原文转载:http://www.shaoqun.com/a/483679.html

电霸:https://www.ikjzd.com/w/2597

吉祥邮:https://www.ikjzd.com/w/1565

二类电商:https://www.ikjzd.com/w/1457


一、auth组件介绍可以实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,内置了强大的用户认证系统--auth,它其实就是一个app二、内置属性方法注意:在用属性方法前,必须进行数据库迁移,两条命令1.authenticate用户认证settings.py基本路径配置好urls.py注意每次配好路由login.htmlps:{%csrf_token%}用上它不用注释csrf那个中间件了&
tineye:https://www.ikjzd.com/w/448
宝贝格子:https://www.ikjzd.com/w/1322
广州2020元旦旅游有哪些好玩地方?元旦广州去哪玩?:http://tour.shaoqun.com/a/21631.html
南海影视城门票价格?佛山南海影视城怎么收费?:http://tour.shaoqun.com/a/60826.html
端午节清远旅游:http://tour.shaoqun.com/a/2967.html

没有评论:

发表评论