Auth模板
1. 什么是Auth模块,有什么用?
django的auth的模块的使用: auth 是集合注册,登录,注销,session 多个功能集合在一起的模块
2. 使用Auth组件的默认auth_user表常用操作
from django.contrib.auth.models import User # 1、创建普通用户 User.objects.create_user(username='Owen', password='123') # 2、创建超级用户 User.objects.create_superuser(username='root', password='root', email='root@root.com') # 3、获取第一个用户 user = User.objects.first() # 4、修改密码 user.set_password('000') user.save() # 5、校验密码 res = user.check_password('000')
3. auth 组件的常用功能:
# 1、校验用户账号及密码,校验成功返回user对象 from django.contrib.auth import authenticate user = authenticate(username=usr, password=pwd) # 2、注册用户到request对象中,注册成功可以request.user访问当前登录用户(会形成session记录) from django.contrib.auth import login login(request, user) # 注册authenticate成功(当前登录)的用户 # 3、注销当前注册的user (用户注销) from django.contrib.auth import logout logout(request)
例题: 检验第一个用户的密码 user = User.objects.first() res = user.check_password('000') # 检验的结果是布尔值, True 或者是False 2. django 的检验用户的账号与密码是否正确的模块: from django.contrib.auth import authenticate user = authenticate(username=usr, password=pwd) #校验用户账号及密码,校验成功返回user对象 3. django 的检验用户成功后的登录模块, 登录之后直接添加session的功能 from django.contrib.auth import login login(request, user) # 注册authenticate成功(当前登录)的用户 #注册用户到request对象中,注册成功可以request.user访问当前登录用户(会形成session记录) 4. django 模块中的注销用户,用户注销 用户可以直接退出了,session会消失 from django.contrib.auth import logout logout(request) 5. django 模块的检验用户是否登录的方法 # 视图函数中使用 if request.user.is_authenticated(): pass # 模板语言中使用 {% if request.user.is_authenticated %} {% else %} {% endif %}
4. auth模块之检验用户是否登录,可以做装饰器用
from django.contrib.auth.decorators import login_required @login_required(login_url='/user_login/') def user_home(request): return render(request, 'user.html', locals())
# 注意他返回的是/user_login/?next=/user_order/ 所以前面拿到的是'next'的key 就可以拿到返回值/user_order/
5. auth模块之给user_auth表添加额外的字段
6. 当发现auth模块的User表的信息太少,想自己添加信息的话: # 在models.py 内 from django.contrib.auth.models import AbstractUser class User(AbstractUser): # 增加自定义字段 info = models.TextField(null=True) phone = models.TextField(null=True) # settings.py配置 AUTH_USER_MODEL = 'app.User' # 下次在调用User表的话 就使用 from app.models import User
6. 通过auth组件实现前端实现用户登录跳出不同的页面的功能
7. 如何在前端显示 这个是谁的主页信息 <body> <h1>{{ request.user.username }}的个人订单</h1> </body> # request.user 是拿到当前登录的对象, # .username 是拿到当前对象的名字来显示 谁谁谁的的个人订单 8. 如何实现用户登录了就显示 个人主页与注销 没登录就显示 登录与注册 # 在前端写: <p> {% if request.user.is_authenticated %} #判断用户是否登录成功 <a href="/user_home/">{{ request.user.username }}</a> #如果登录成功显示 用户的名字 | <a href="/user_logout/">注销</a> # 和注销 {% else %} <a href="/user_login/">登录</a> #如果用户没登录, 显示登录 | <a href="/user_register/">注册</a> # 和注册 {% endif %} </p>
简单的使用Auth组件完成用户的注册登录与判断验证+session的功能简单实现
from django.shortcuts import render, HttpResponse, redirect # from django.contrib.auth.models import User from app.models import User from django.contrib.auth import authenticate, login, logout from django.contrib.auth.decorators import login_required from django.db.utils import IntegrityError def index(request): return render(request, 'index.html', locals()) def user_login(request): if request.method == "GET": return render(request, 'login.html') if request.method == "POST": # 在请求url中通过next取出回跳的页面路径 back_url = request.GET.get('next', '/') usr = request.POST.get('usr', None) pwd = request.POST.get('pwd', None) # 用前台传入的账户密码作登录校验 user = authenticate(username=usr, password=pwd) # type: User if user: # 在session中记录登录状态 => login(request, user)来记录登录状态 # request.session['usr'] = user.username # request.session['is_login'] = True login(request, user) return redirect(back_url) def user_logout(request): logout(request) return redirect('/') def user_register(request): if request.method == "GET": return render(request, 'register.html') if request.method == "POST": usr = request.POST.get('usr', None) pwd = request.POST.get('pwd', None) try: User.objects.create_user(username=usr, password=pwd) except IntegrityError as e: print('注册失败:%s' % e) return redirect('/') # 装饰器的页面返回key是next:/user_login/?next=/user_order/ @login_required(login_url='/user_login/') def user_order(request): return render(request, 'order.html', locals()) @login_required(login_url='/user_login/') def user_home(request): return render(request, 'user.html', locals())