Django的auth【认证】模块简介详解编程语言

首先我们先来复习一下路由别名如何使用,这里仅仅复习一下二级路由的路由别名该如何使用

·1、在视图函数中使用二级路由别名,需要加上app的名称+“:”+ “路由别名”

from django.urls import reverse 
 
return redirect(reverse("app1:auth_index_view")) 

  

Django的auth【认证】模块简介详解编程语言

2、在html文件中使用二级路由的别名,也 要通过app名在冒号来查找路由别名

<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> 

  

Django的auth【认证】模块简介详解编程语言

这里需要注意一下,如果是使用django2.0的版本,也就是url中使用path方法的话,如果要使用路由别名,需要按照下面的方式处理

在project的urls中按照这样设计

urlpatterns = [ 
    path('admin/', admin.site.urls), 
    path('app1/', include("app1.urls")), 
    path('auth/', include("my_auth_app.urls",namespace="my_auth_app")), 
] 

  

在对应的app中按照下面的方式设计,务必要价格app_name的变量才可以正常使用路由别名

from django.contrib import admin 
from django.urls import path 
from django.urls import include 
from my_auth_app import views 
app_name = '[my_auth_app]' 
urlpatterns = [ 
 
    # path('admin/', admin.site.urls), 
    path('login/',views.login,name="auth_login"), 
    path('index/',views.index,name="auth_index"), 
    path('logout/',views.logout,name="auth_logout"), 
] 

  

下面我们正式进入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这个表,则只需要修改表明为我们的表名称

from django.contrib.auth.models import AbstractUser 
 
# Create your models here. 
 
class Userinfo(AbstractUser): 
 
    iphone = models.CharField(max_length=11,null=True,blank=True) 
    email = models.CharField(max_length=64,null=True,blank=True) 
    create_time = models.DateTimeField(auto_now_add=True,blank=True) 
 
    def __str__(self): 
        return self.username 

  

然后需要在setting中设置

AUTH_USER_MODEL = "app1.Userinfo" 

  

django就没有User表了,替换为我们的Userinfo表了,我们新添加的字段也补充进去了

Django的auth【认证】模块简介详解编程语言

如果我们采用扩展的方式扩展默认的user表,则auth模块还是可以继续使用的,但是如果要创建新的用户,则需要使用我们新创建的表

                from app1 import models 
                user_obj = models.Userinfo.objects.create_user(username="alex5", password="alexdsb") 

 

我们可以看到创建的新的用户成功了

 

Django的auth【认证】模块简介详解编程语言

 我们使用新的用户登陆

Django的auth【认证】模块简介详解编程语言

同样如果要修改密码,也需要到新的表中操作

                user_obj = models.Userinfo.objects.filter(username="alex5")[0] 
                user_obj.set_password("admin123.") 
                user_obj.save() 

  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/20801.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论