Django(part50)--Web请求认证(django request.user)

网友投稿 275 2022-08-31


Django(part50)--Web请求认证(django request.user)

学习笔记,仅供参考

文章目录

​​Web请求认证​​

​​用户认证authenticate​​​​用户登录login​​​​用户登出logout​​​​举个例子​​

Web请求认证

相关函数

from django.contrib.auth import authenticate, login, logout

用户认证authenticate

函数用法

authenticate(username='用户名', password='原始密码')

该函数可以验证用户名和密码是否合法,如果合法则返回User模型类的对象,如果不合法返回None

官方示例

from django.contrib.auth import authenticateuser = authenticate(username='john', password='secret')if user is not None: # 通过认证else: # 没有通过认证

在这个函数中,它不仅检查了我们输入的用户名和密码是否和存储的相匹配,还检查了id_active是否为True。

用户登录login

函数用法

login(request, user)#user为User模型类创建的用户对象#request为HttpRequest对象

该方法使用Django的session框架,将用户的信息保存在session中。

示例

from django.contrib.auth import authenticate, logindef login_view(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: login(request, user) #用户的信息保存在session中 # 重新指定登陆成功页 else: # 返回一个无效的登陆信息

用户登出logout

函数用法

logout(request)

通过​​django.contrib.auth.login()​​​登入的用户,可以使用​​django.contrib.auth.logout()​​退出登陆

示例

from django.contrib.auth import logoutdef logout_view(request): logout(request)

举个例子

举个例子1

现在,我们用我们的admin管理员账号来演示用户认证,用户登录和用户登出.

在myuser应用下的views.py模块中,我们创建两个视图处理函数,用于用户认证、用户登录和用户登出:

from django.shortcuts import renderfrom django.import HttpResponsefrom django.contrib.auth import modelsfrom django.contrib.auth import authenticate, login, logout# Create your views here.def mylogin(request): if request.method == "GET": return render(request, 'myuser/login.html', locals()) elif request.method == "POST": username = request.POST.get('username', '') password = request.POST.get('password', '') try: user = authenticate(username = username, password = password) if user is not None: login(request, user)# print(request.session) return HttpResponse("登陆成功...") else: return HttpResponse("登录失败...") except: return HttpResponse("没有此用户...")def mylogout(request):# print("mylogout运行了...") logout(request) return HttpResponse("退出登录...")

在myuser应用下的urls.py模块中,我们创建两个路由:

from django.urls import re_pathfrom . import viewsurlpatterns = [ re_path(r'^login/$', views.mylogin), re_path(r'^logout/$', views.mylogout),]

现在,我们向admin数据库后台管理系统django.urls import re_pathfrom . import viewsurlpatterns = [ re_path(r'^login/$', views.mylogin), re_path(r'^logout/$', views.mylogout), re_path(r'^reg/$', views.myreg),]

在在myuser应用的views.py模块中,添加一个视图函数:

def myreg(request): if request.method == "GET": return render(request, 'myuser/register.html') elif request.method == "POST": username = request.POST.get('username', '') password = request.POST.get('password', '') #这里我们先不做用户认证 try: user = models.User.objects.create_user( username = username, password = password ) user.save() return HttpResponse("注册成功...") except: return HttpResponse("注册失败...")

现在,我们向select id, username, email, is_superuser from auth_user;+----+------------+----------------------+--------------+| id | username | email | is_superuser |+----+------------+----------------------+--------------+| 1 | goatbishop | goatbishop@gmail.com | 1 || 2 | darkgoat | | 0 |+----+------------+----------------------+--------------+2 rows in set (0.01 sec)

可以看到,我们的数据表中多了一条普通用户的账号记录。需要注意的是,普通用户是不可以登录到admin数据库后台管理界面的。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot MainApplication类文件的位置详解
下一篇:Django(part48)--用户认证系统(django 用户认证)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~