代码改变世界

(四)注册登录--重用Django

2019-11-23 10:23  那个杰克  阅读(136)  评论(0编辑  收藏  举报

一、使用已有登录功能

(1)进入Lib\sitepackages\django\contrib\admin\templates\registration下,将对应模板,复制到项目template模板中
(2)重写登录模板,且放入templates/account文件夹
(3)设计模型使用已有的User模型
(4)设计注册模型,使用已有的User模型,及进行新扩展

设计及代码开发步骤逻辑:设计完数据模型,编写表单类,创建视图函数,设置前端模板,设置URL,GET方法先展示前端模板,后POST方法编写表单类修改数据库,及存储数据库逻辑

1、设计数据模型

# models.py文件示例
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
    user = models.OneToOneField(User,unique=True,on_delete=None)
    birth = models.DateField(blank=True,null=True)
    phone = models.CharField(max_length=11,null=True)
    # createTime = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return 'user {}'.format(self.user.username)

2、编写表单类
account/目录下,新增forms.py文件

from django import forms
from django.contrib.auth.models import User
from account.models import UserProfile,UserInfo

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput) # widget=forms.PasswordInput密码文显示

3、编写视图函数

def user_login(request):
    if request.method == "GET":
        login_form = LoginForm()
        return render(request,"account/login.html",{"form":login_form})
    elif request.method == "POST":
        pass

4、设置前端模板
注意:表单需要从视图函数,进行传递到模板

{% extends "base.html" %} 
{% block title %}标题{% endblock %}
{% block content %}
{#内容#}
{#使用表单#}
<div class="container">
<form action="." method="POST">{%csrf_token%}
<div class="spadding">
    <label for="{{ form.username.id_for_label }}" class="title">用户名:</label>
    {{ form.username }}
</div>
<div class="spadding">
    <label for="{{ form.password.id_for_label }}" class="title">密码:</label>
    {{ form.password }}
</div>
<input type="submit" class="btn btn-block btn-primary" value="登录">
</form>
</div>
{% blockend %}
<style>
    h1 {
            color:#00BBFF;
    }
    //控制输入框左右对齐
    .title {
            float: left;
            width: 70px;
            text-align: left;
            padding-right: 10px;
        }
    div.spadding {
        margin: 10px;
        padding-bottom: 10px;
        width: 300px;
    }
</style>

5、设置URL,从Lib\sitepackages\django\contrib\auth\urls.py里配置使用

path('newlogin/',auth_views.LoginView.as_view(template_name="account/login.html"),name="user_login"),
template_name=重新定向自定义模板
name=给路径命名

6、POST方法编写表单类修改数据库,及存储数据库逻辑

def user_login(request):

    if request.method == "GET":
        login_form = LoginForm()
        return render(request,"account/login.html",{"form":login_form})
    elif request.method == "POST":
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            user = authenticate(login_form.cleaned_data)
            if user:
                login(request,user)
                return HttpResponse("您已经登录成功....")
            else:
                return HttpResponse("您的用户名或密码错误,请重新登录")
        else:
            login_url = reverse("account:user_login")
            return redirect(login_url)