Django学习 6

用户的注册

在django的封装函数里其实是有一个特殊的用户函数的,可以在里面直接进行用户的注册和登录,这次先讲注册,首先,我们需要一个注册的界面,html代码如下

<h2 align="center">注册Products账户</h2>
    <form action="{% url '注册页面' %}" method="post" align="center">
        {% csrf_token %}
        用户名:<br><input class="hanpi" type="text" name="用户名"><br>
        密码:<br><input class="hanpi" type="password" name="密码"><br>
        确认密码:<br><input class="hanpi" type="password" name="确认密码">
        <br>{{ name1 }}<br>
        <input class="hanpi btn btn-primary" type="submit" value="提交">
    </form>
// 注册页面如同之前的在urls.py里注册
// path('signup/', views.signup, name='注册页面'),

这样我们就可以通过按钮发送数据给action所链到的页面,这样我们就可以在界面的text输入里输入之后进行注册,然后我们会把输入的数据通过post请求发送到views.py页面里负责’注册页面’这个html的函数,因为如果不特别写上post请求request默认得到的就是get请求,所以我们可以通过不同的请求来返回不同的页面,从而达到最基础的功能。

    if request.method == 'GET':
        return render(request, 'signup.html');
    elif request.method == 'POST':
        user_name = request.POST['用户名']
        passname1 = request.POST['密码']
        passname2 = request.POST['确认密码']

然后使用变量来保存所获得的POST请求所发送的东西,然后我们就要先进行一些判断,首先我们需要先导入一些包。

from django.contrib.auth.models import User
from django.contrib import auth

导入这两个包我们就可以使用简单的登录和注册功能了,因为是注册嘛,所以我们需要先判断一下用户名是否有相同的

if User.objects.get(username=user_name):
    return render(request,'signup.html',{'name1':'用户名已存在'})

使用try和except来进行判断和运行。

try:
   if User.objects.get(username=user_name):
      return render(request,'signup.html',{'name1':'用户名已存在'})
except User.DoesNotExist:
   if passname1 == passname2:
       User.objects.create_user(username= user_name, password= passname1)
       //在数据库里进行注册
       return render(request, '主页面', {'user1': user_name})
   else:
       return render(request, 'signup.html', {'name1': '两次输入的密码不一致'})

之后我们通过之前的方法迁移数据库建立表,创建一个管理员账号

然后我们回到前台,打开注册界面,输入用户名密码,点击注册,然后我们就可以到后台登录管理员账号来查看我们之前注册的用户了

用户的登录

老样子,我们先创建一个登录页面

<h2 align="center">登录Products账户</h2>
    <form action="{% url '登录页面' %}" method="post" align="center">
        {% csrf_token %}
        用户名:<br><input class="hanpi" type="text" name="用户名"><br>
        密码:<br><input class="hanpi" type="password" name="密码"><br>
        {{ name1 }}<br>
        <input class="hanpi btn btn-primary" type="submit" value="提交">
    </form>

然后继续去urls.py里进行注册

path('login/', views.login, name='登录页面'),

然后我们还是和注册的流程一样,来到views.py

def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    elif request.method == 'POST':
        user_name = request.POST['用户名']
        pass_name = request.POST['密码']

获取POST请求的用户名和密码,然后实用导入的包中的函数

user = auth.authenticate(username= user_name, password= pass_name)

这个函数就是一个去数据库中找账号与密码匹配,这样我们就可以判断用户名和密码是否匹配,如果是不匹配就会返回None,反之则匹配成功,如果匹配我们就可以进行下一步

auth.login(request, user)
return redirect('主页面')

使用login函数进行登录,这样我们就算是登录上了,然后使用redirect直接返回主页面即可。(管理员账号也是可以登录的)

用户的退出

这个就有点不一样了,因为我们是退出,所以不可能特别的去建立一个页面来进行退出,但是我们还是得发送POST请求来让程序知道我们现在想要退出,所以我们可以先在返回页面进行一下设置,因为正常的主页面显示的应该是登录和注册,然而当我们登录之后可就不能显示这两个了,我们需要显示登出按钮,不去显示登录和注册,这样我们就要对主页面进行修改

{% if user.is_authenticated %}
     <ahref="{% url '主页面' %}">{{ user }} </a>
     <a href="{% url '发布页面' %}"> 发布</a>
     <a href="">退出</a>
{% else %}
     <a href="{% url '登录页面' %}">登录</a>
     <a href="{% url '注册页面' %}">注册</a>
{% endif %}

这样我们就可以判断是否有用户登录上了网页,从而来显示不同的内容,那么现在我们需要的是点击退出然后返回到退出函数并发送POST请求,然后退出函数对登录进行退出然后返回主页面。按照这个逻辑,我们首先需要搞定点击退出到达退出函数切还可以发送POST请求。

<a href="Javascript:{document.getElementById('out1').submit()}">退出</a>
<form id="out1" action="{% url '退出页面' %}" method="post">{% csrf_token %}</form>

我们需要将刚才的退出标签进行修改,href改成一个dom的获取,这样我们就可以在点击a标签的同时进行form标签的操作了,老样子,去urls.py里注册退出页面

path('logout/', views.logout, name='退出页面'),

但是我们不需要写这个页面,我们只要我们能够调用views.py力度这个logout函数,所以我们来到views.py写logout

def logout(request):
    if request.method == 'POST':
        auth.logout(request)
        return redirect('主页面')

这个就简单多了,我们只需要判断是否是POST请求,然后使用auth包里的logout函数就可以达成用户的退出,然后我们只需要返回到主页面就行了,这样主页面也会自动的转到未登录状态

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页