Django的auth模块
Posted bainianminguo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django的auth模块相关的知识,希望对你有一定的参考价值。
首先我们先来复习一下路由别名如何使用,这里仅仅复习一下二级路由的路由别名该如何使用
·1、在视图函数中使用二级路由别名,需要加上app的名称+“:”+ “路由别名”
from django.urls import reverse return redirect(reverse("app1:auth_index_view"))
2、在html文件中使用二级路由的别名
<form action="{% url ‘app1:auth_login_view_name‘ %}" method="post" novalidate > {% csrf_token %} {{ obj.username.label_tag }}{{ obj.username }} <span>{{ obj.errors.username.0 }}</span> {{ obj.userpwd.label_tag }}{{ obj.userpwd }} <span>{{ obj.errors.userpwd.0 }}</span> {# <a href="{% url ‘app1:auth_login_view_name‘ %}">点我大</a>#} <input type="submit" value="提交"> </form>
下面我们正式进入auth模块的学习
1、首先需要导入两个模块
from django.contrib import auth
from django.contrib.auth.models import User # 创建用户的模块
2、然后这里是auth模块的具体的使用的方法
def auth_login_view(request): method_type = request.method.lower() if method_type == "get": form_obj = my_new_forms() return render(request,"auth_login.html",{ "obj":form_obj }) else: username = request.POST.get("username") userpwd = request.POST.get("userpwd") user = auth.authenticate(username=username,password=userpwd) # 这里必须是user用其他的都不行,验证用户名和密码是否通过校验,如果通过则返回一个usr对象,如果不通过,则返回一个匿名用户对象 if user: auth.login(request,user) # 把username这个信息封装到request.user中 print(dir(user)) from django.contrib.auth.models import User new_common_user = User.objects.create_user() # 创建普通用户 new_super_user = User.objects.create_superuser() # 创建超级管理员用户 error_create_user = User.objects.create() # 我们不用这个方法创建用户,这个方法创建的用户的密码不是加密的,一般也不能用 user = User.objects.get(username="aaa") user.set_password() user.save() # 修改密码,这里需要保存才能生效 user.check_password() # 用户需要修改密码的时候,首先先判断当前输入的密码对不对 return redirect(reverse("app1:auth_index_view")) else: return redirect(reverse("app1:auth_login_view_name"))
3、auth模块还自带一个装饰器,用来判断用户是否登陆,也需要先导入一个模块
from django.contrib.auth.decorators import login_required # 判断用户是否登陆的装饰器
@login_required # django自带的装饰器,判断某个用户是否登陆 def auth_index_view(request): print(request.user.is_authenticated()) # 判断某个用户是否登陆,如果是则返回true return render(request,"auth_index.html",{"name":request.user.username})
这里如果用户没有登陆成功,则页面需要跳转到某个页面,这个页面需要在settings中配置
# 如果没有登陆地登陆,默认跳转到哪个url LOGIN_URL = "http://www.baidu.com"
4、auth模块的注销的方法
def logout(request): auth.logout(request) # auth.logout方法,删除cookies和seesion return redirect(reverse("app1:auth_login_view_name"))
另外,django默认的user表中只有有限的字段,如果我们想扩展其中的字段该怎么处理呢,这里我们有2种办法可以处理
方法1,新建一个表,一对一到user表中
# 1、新建一个表,一对一关联auth_user表 from django.contrib.auth.models import User # 先把django自带的user这个表导入 class User_detail(models.Model): phone = models.CharField(max_length=11) usr_obj = models.OneToOneField(to=User) # 一对一关联到django自带的user表
方法2,使用继承的方法,这里需要注意,如果使用继承的方法,则django的数据库中就乜有auth_user表中了,所以上面的方法中如果用auth_user这个表,则只需要修改表明为我们的表名称
# 2、自己写一个类 from django.contrib.auth.models import User from django.contrib.auth.models import AbstractBaseUser class Userinfo(AbstractBaseUser): phone = models.CharField(max_length=11) addr = models.TextField() # 如果我们使用继承的方式扩展内置的auth_user表,这个时候要在settings.py中配置默认用户做认证用的那张表 # AUTH_USER_MODEL = "app1.Userinfo"
以上是关于Django的auth模块的主要内容,如果未能解决你的问题,请参考以下文章