学习笔记,仅供参考
基于上个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个模板文件:
login.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 | [email protected] | 1 |
+----+------------+----------------------+--------------+
1 row in set (0.00 sec)
进行模拟登录
现在,我们开启服务,并向http://127.0.0.1:8000/myuser/login发起请求,并填入用户名和密码:
点击登录
:
显示登录失败…ARE YOU OK?
不应该啊,难道是我记错密码了?
我重新输入一个密码,结果登录成功了,果然是我记错密码了: