zoukankan      html  css  js  c++  java
  • (四)注册登录--重用Django

    一、使用已有登录功能

    (1)进入Libsitepackagesdjangocontribadmin emplates egistration下,将对应模板,复制到项目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;
                 70px;
                text-align: left;
                padding-right: 10px;
            }
        div.spadding {
            margin: 10px;
            padding-bottom: 10px;
             300px;
        }
    </style>
    

    5、设置URL,从Libsitepackagesdjangocontribauthurls.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)
    
  • 相关阅读:
    leetcode236
    leetcode139
    leetcode56
    leetcode19
    2018-5-22-SublimeText-粘贴图片保存到本地
    2019-1-29-Sublime-Text-安装中文、英文字体
    2019-1-29-Sublime-Text-安装中文、英文字体
    2018-8-15-WPF-插拔触摸设备触摸失效
    2018-8-15-WPF-插拔触摸设备触摸失效
    2019-10-18-dotnet-修复找不到-System.ServiceProcess-定义
  • 原文地址:https://www.cnblogs.com/yangsun/p/11915565.html
Copyright © 2011-2022 走看看