当前位置 : 主页 > 编程语言 > python >

Django(part49)--用Django自带的User模型类进行模拟登录

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,仅供参考 用Django自带的User模型类进行模拟登录 基于上个Blog中学习的用户认证系统,我们再用Django自带的User模型类,进行模拟登录(模拟登录的意思就是没有真正的登录,不

学习笔记,仅供参考


用Django自带的User模型类进行模拟登录



基于上个Blog中学习的用户认证系统,我们再用Django自带的User模型类,进行模拟登录(模拟登录的意思就是没有真正的登录,不涉及session和cookies)。



第一步



创建新的APP, 并添加路由信息



我们在mywebsite_bookstore项目下创建一个APP,叫myuser:

python manage.py startapp myuser

在settings.py中的INSTALLED_APPS列表中添加myuser应用:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bookstore',
'userinfo',
'myuser',
]

我们在myuser应用中创建一个新的urls.py文件,并敲入如下代码:

from django.urls import re_path
from . import views

urlpatterns = [
re_path(r'^login/$', views.mylogin),

]

在主urls.py中,添加myuser应用的路由:

from django.urls import re_path
from django.contrib import admin
from django.conf.urls import include
from . import views

urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path(r'^myuser/', include('myuser.urls')),
]



第二步



新建模板文件夹templates/myuser,创建登录页面的模板文件,并创建视图函数login



在myuser应用下新建一个模板文件夹templates,再建立一个myuser文件夹,在里面创建2个模板文件:

Django(part49)--用Django自带的User模型类进行模拟登录_html



login.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<form action="/myuser/login/" method="POST">
{% csrf_token %}
<div>
<lable>用户名</lable>
<input type="text" name="username"
value="{{ username }}">
</div>
<div>
<lable>密码</lable>
<input type="password" name="password">
</div>
<div>
<lable for="id_remember">记住密码</lable>
<input type="checkbox" name="remember" id="id_remember"
value="1">
</div>
<div>
<input type="submit" value="登陆">
</div>

</form>

</body>
</html>



在myuser应用下的views.py模块中,我们创建新的视图函数mylogin:

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 = models.User.objects.get(username = username)
if user.check_password(password):
return HttpResponse("登陆成功...")
else:
return HttpResponse("登录失败...")
except:
return HttpResponse("没有此用户...")

在这个视图函数中,我们不仅检查了用户是否存在,还检测了在用户存在条件下输入的密码是否正确。



注意,这里的​​models.User.objects.get(username = username)​​是从mysql的mybookstore数据库的auth_user数据表中提取的数据,我们来简单看一下这个数据表中的数据:

mysql> select id, username, email, is_superuser from auth_user;
+----+------------+----------------------+--------------+
| id | username | email | is_superuser |
+----+------------+----------------------+--------------+
| 1 | goatbishop | goatbishop@gmail.com | 1 |
+----+------------+----------------------+--------------+
1 row in set (0.00 sec)



第三步



进行模拟登录



现在,我们开启服务,并向http://127.0.0.1:8000/myuser/login发起请求,并填入用户名和密码:

Django(part49)--用Django自带的User模型类进行模拟登录_django_02

点击​​登录​​:

Django(part49)--用Django自带的User模型类进行模拟登录_模拟登录_03

显示登录失败…ARE YOU OK?

不应该啊,难道是我记错密码了?

我重新输入一个密码,结果登录成功了,果然是我记错密码了:

Django(part49)--用Django自带的User模型类进行模拟登录_python_04


上一篇:Django从理论到实战(part36)--QuerySet转换SQL
下一篇:没有了
网友评论