Django(part49)--用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模型类进行模拟登录_第1张图片


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发起请求,并填入用户名和密码:

Django(part49)--用Django自带的User模型类进行模拟登录_第2张图片

点击登录

Django(part49)--用Django自带的User模型类进行模拟登录_第3张图片

显示登录失败…ARE YOU OK?

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

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

Django(part49)--用Django自带的User模型类进行模拟登录_第4张图片

你可能感兴趣的:(python,后端)