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)
    
  • 相关阅读:
    使用匿名内部类和lamda的方式创建线程
    匿名内部类与lamda表达式
    机器学习中数据量多少与模型过拟合欠拟合之间的关系
    设计模式和java实现
    八大排序算法汇总——java实现
    java多线程并发编程中的锁
    java NIO
    网络通信引擎ICE的使用
    机器学习算法汇总大梳理
    处理样本不均衡数据
  • 原文地址:https://www.cnblogs.com/yangsun/p/11915565.html
Copyright © 2011-2022 走看看