• Django中用 form 实现登录注册


    1、forms模块
    将Models和Forms结合到一起使用,将Forms中的类和Models中的类关联到一起,实现属性的共享
    1、在forms.py中创建class,继承自forms.ModelForm
    2、创建内部类:Meta,关联Form和Model


    属性:
    1、model:指定要关联的Model类
    2、fields:指定从Model中取哪些字段生成控件
    1、取值 "__all__",全部的属性都要生成控件
    2、取值 列表或元组,声明允许生成控件的属性名称
    3、labels:每个属性所关联的label,取值为字典
    labels = {
    "属性名1","文本1",
    "属性名2","文本2"
    }

    url:

     1 urlpatterns = [
     2     url(r'^01_request/$',request_views),
     3     url(r'^02_meta/$',meta_views),
     4     url(r'^03_form/$',form_views),
     5     url(r'^04_get_post/$',get_post_views),
     6     url(r'^05_remark/$',remark_views),
     7 
     8     url(r'^register/$',register_views),
     9     url(r'^login/$',login_views),
    10     url(r'^login_auto/$',login_auto_views),
    11 
    12     url(r'01_login',login_form_views),
    13     url(r'01_regiter',regiter_form_views),
    14 ]

    models.py

     1 from django.db import models
     2 
     3 class Users(models.Model):
     4     uname = models.CharField(max_length=30)
     5     upwd = models.CharField(max_length=30)
     6     uage = models.IntegerField()
     7     uemail = models.EmailField()
     8 
     9     def __str__(self):
    10         return self.uname

    views.py:

      1 from django.shortcuts import render,HttpResponse
      2 from django.views.decorators.csrf import csrf_protect
      3 
      4 
      5 def request_views(request):
      6     # request,类型就是HttpRequest
      7     # request 封装的是与所有请求相关的内容
      8     # print(dir(request))
      9 
     10     scheme = request.scheme    #请求方案(协议)
     11     body = request.body        #请求主体
     12     path = request.path        #请求路径
     13     host = request.get_host()  #请求主机地址  /  域名
     14     method = request.method    #请求方法
     15     get = request.GET          #get的请求数据
     16     post = request.POST        #get的请求数据
     17     cookies = request.COOKIES  #cookie中的数据
     18     meta = request.META        #请求中的元数据
     19     return render(request,"01_request.html",locals())
     20 
     21 
     22 def meta_views(request):
     23     print(request.META["HTTP_REFERER"])
     24     return HttpResponse("request ok")
     25 
     26 def form_views(request):
     27     return render(request,"03_form.html")
     28 
     29 @csrf_protect
     30 def get_post_views(request):
     31     if request.method == "GET":
     32         name = request.GET.get("uname")
     33         pwd = request.GET.get("upwd")
     34         return HttpResponse("用户名:"+name+",用户密码:"+pwd)
     35     else:
     36         name = request.POST["uname"]
     37         pwd = request.POST["upwd"]
     38         return HttpResponse ("用户名:" + name + ",用户密码:" + pwd)
     39 
     40 from .forms import *
     41 def remark_views(request):
     42     if request.method == "POST":
     43         subject = request.POST["subject"]
     44         return HttpResponse(subject)
     45     form = RemarkForm()
     46     return render(request,"05_remark.html",locals())
     47 
     48 from .form import *
     49 def login_views(request):
     50     if request.method == "GET":
     51         forms = LoginForm()
     52         return render(request,"login.html",locals())
     53     else:
     54         uname = request.POST["uname"]
     55         upwd = request.POST["upwd"]
     56         user = Users.objects.get(uname=uname)
     57         if user:
     58             if user.upwd == upwd:
     59                 return HttpResponse("验证通过")
     60             else:
     61                 errmsg = "密码"
     62                 return render (request, "login.html", locals ())
     63         else:
     64             errmsg = "用户名错误"
     65             return render(request,"login.html",locals())
     66 
     67 
     68 def login_auto_views(request):
     69     if request.method == "GET":
     70         form = LoginForm()
     71         return render(request,"login.html",locals())
     72     else:
     73         form = LoginForm(request.POST)
     74         if form.is_valid():
     75             data = form.cleaned_data
     76             print(data)
     77             uname = data["uname"]
     78             print(uname)
     79             upwd = data["upwd"]
     80             user = Users.objects.filter(uname=uname).first()
     81             if user:
     82                 if user.upwd == upwd:
     83                     return HttpResponse("验证通过")
     84                 else:
     85                     errmsg = "密码错误"
     86                     return render (request,"login.html",locals())
     87             else:
     88                 errmsg = "用户名错误"
     89                 return render(request,"login.html",locals())
     90         return HttpResponse("信息错误")
     91 
     92 
     93 def register_views(request):
     94     if request.method == "GET":
     95         forms = RegisterForm()
     96         return render(request,"register.html",locals())
     97     else:
     98         form = RegisterForm(request.POST)
     99         if form.is_valid():
    100             data = form.cleaned_data
    101             uname = data["uname"]
    102             upwd = data["upwd"]
    103             uage = data["uage"]
    104             uemail = data["uemail"]
    105             user = Users.objects.filter(uname=uname).first()
    106             if user:
    107                 errmsg = "用户名已存在"
    108                 return render(request, "register.html", locals())
    109             else:
    110                 user = Users (uname=uname, upwd=upwd, uage=uage, uemail=uemail)
    111                 user.save ()
    112 
    113                 Users(**data).save()
    114                 return HttpResponse("注册成功")
    115 
    116 
    117 def login_form_views(request):
    118     if request.method == "GET":
    119         form = UserLoginForm()
    120         return render(request,"login_form.html",locals())
    121     else:
    122         uname = request.POST["uname"]
    123         upwd = request.POST["upwd"]
    124         user = Users.objects.get(uname=uname)
    125         if user:
    126             if user.upwd == upwd:
    127                 return HttpResponse("验证通过")
    128             else:
    129                 errmsg = "密码"
    130                 return render (request, "login.html", locals ())
    131         else:
    132             errmsg = "用户名错误"
    133             return render(request,"login.html",locals())
    134 
    135 
    136 
    137 def regiter_form_views(request):
    138     if request.method == "GET":
    139         form = UserRegisterForm()
    140         return render(request,"register_form.html",locals())
    141     else:
    142         form = RegisterForm(request.POST)
    143         if form.is_valid():
    144             data = form.cleaned_data
    145             uname = data["uname"]
    146             upwd = data["upwd"]
    147             uage = data["uage"]
    148             uemail = data["uemail"]
    149             user = Users.objects.filter(uname=uname).first()
    150             if user:
    151                 errmsg = "用户名已存在"
    152                 return render(request, "register.html", locals())
    153             else:
    154                 user = Users (uname=uname, upwd=upwd, uage=uage, uemail=uemail)
    155                 user.save ()
    156 
    157                 Users(**data).save()
    158                 return HttpResponse("注册成功")

    forms.py

     1 from django import forms
     2 
     3 # 表示评论内容表单控件
     4 # 评论标题  文本框
     5 # 评论人邮件   type='Email'
     6 # 题目  Select
     7 # isSave  type="checkbox"
     8 class RemarkForm(forms.Form):
     9     subject = forms.CharField(label="标题")
    10     email = forms.EmailField(label="邮箱")
    11     message = forms.CharField(label="内容",widget=forms.Textarea)
    12     topic_choice = (
    13         ("1","好评"),
    14         ("2","中评"),
    15         ("3","差评")
    16     )
    17     topic = forms.ChoiceField(label="评价",choices=topic_choice)
    18     issave = forms.BooleanField(label="是否保存")

    form.py

     1 from django import forms
     2 
     3 class LoginForm(forms.Form):
     4     uname = forms.CharField(label="用户名:")
     5     upwd = forms.CharField(label="用户密码:",widget=forms.PasswordInput)
     6 
     7 class RegisterForm(forms.Form):
     8     uname = forms.CharField(label="用户名称:",max_length=18)
     9     upwd = forms.CharField(label="用户密码:",widget=forms.PasswordInput)
    10     uage = forms.IntegerField(label="用户年龄:")
    11     uemail = forms.EmailField(label="用户邮件:")
    12 
    13 
    14 from .models import *
    15 # 创建class表示登录的表单,要关联Users实体类
    16 class UserLoginForm(forms.ModelForm):
    17     # 创建内部类Meta,关联Model
    18     class Meta:
    19         # 1、指定关联的Model
    20         model = Users
    21         # 2、指定要生成的控件
    22         fields = ["uname","upwd"]
    23         # 3、指定每个控件对应的label
    24         labels = {
    25             "uname":"用户名称",
    26             "upwd":"用户密码"
    27         }
    28 class UserRegisterForm(forms.ModelForm):
    29     # 创建内部类Meta,关联Model
    30     class Meta:
    31         # 1、指定关联的Model
    32         model = Users
    33         # 2、指定要生成的控件
    34         fields = "__all__"
    35         # 3、指定每个控件对应的label
    36         labels = {
    37             "uname":"用户名称",
    38             "upwd":"用户密码",
    39             "uage":"用户年龄",
    40             "uemail":"用户邮箱"
    41         }

    login.html:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>用户登录</title>
     6 </head>
     7 <body>
     8     <p>{{ errmsg }}</p>
     9     <form action="/login/" method="post">
    10      {% csrf_token %}
    11         {% for form in forms %}
    12             <p>{{ form.label }}{{ form }}</p>
    13         {% endfor %}
    14         <p><input type="submit" value="登录"></p>
    15     </form>
    16 
    17 ==========================================================
    18     <p>{{ errmsg }}</p>
    19     <form action="/login_auto/" method="post">
    20      {% csrf_token %}
    21         {% for form in forms %}
    22             <p>{{ form.label }}{{ form }}</p>
    23         {% endfor %}
    24         <p><input type="submit" value="登录"></p>
    25     </form>
    26 </body>
    27 </html>

    register.html

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>用户登录</title>
     6 </head>
     7 <body>
     8     <p>{{ errmsg }}</p>
     9     <form action="/register/" method="post">
    10      {% csrf_token %}
    11         {% for form in forms %}
    12             <p>{{ form.label }}{{ form }}</p>
    13         {% endfor %}
    14         <p><input type="submit" value="注册"></p>
    15     </form>
    16 </body>
    17 </html>

    login_form.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
         <p>{{ errmsg }}</p>
        <form action="/01_login/" method="post">
            {% csrf_token %}
                {{ form.as_p }}
            <p><input type="submit" value="登录"></p>
        </form>
    
    </body>
    </html>

      register_form.html:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8      <p>{{ errmsg }}</p>
     9     <form action="/01_regiter/" method="post">
    10         {% csrf_token %}
    11             {{ form.as_p }}
    12         <p><input type="submit" value="登录"></p>
    13     </form>
    14 
    15 </body>
    16 </html>
  • 相关阅读:
    js中定义变量的三种方式const,val,let 的区别
    jquery中attr和prop的区别
    jQuery prop() 方法
    toFixed()方法
    java中匿名类的讲解
    Java序列化的几种方式以及序列化的作用
    classloader加载过程
    有关java中static关键的重写问题
    java泛型的讲解
    真实的周星星,你了解吗?
  • 原文地址:https://www.cnblogs.com/lmh001/p/9564430.html
Copyright © 2020-2023  润新知