zoukankan      html  css  js  c++  java
  • Django中forms的三种形式写法

    一、原生的form
    In your models.py
    1 class Account(models.Model):
    2     username=models.CharField('username',max_length=20);
    3     password=models.CharField('password',max_length=50);
    4     email=models.EmailField('email');
    5 
    6     class Meta:
    7         verbose_name='Account'
    8         verbose_name_plural=verbose_name

    In your templates(register.html)
     1                 <form action="" method="POST" class="" role="form">             
     2                    <div class="input-group">
     3                         <span class="input-group-addon" ><img src="{% static 'img/newuser.png' %}" alt="" width='24px'></span>
     4                         <input type="text" class="form-control" placeholder="your name" autofocus="" required="" name='username'>
     5                     </div>               
     6                     <div class="input-group">
     7                         <span class="input-group-addon"><img src="{% static 'img/email.png' %}" alt=""></span>
     8                         <input type="email" class="form-control" placeholder="your email" required="" name='email'>
     9                     </div>
    10 
    11                     <div class="input-group">
    12                         <span class="input-group-addon"><img src="{% static 'img/password_set.png' %}" alt=""></span>
    13                         <input type="password" class="form-control" placeholder="your password" required="" name='password_set'>
    14                     </div>
    15 
    16                     <div class="input-group">
    17                         <span class="input-group-addon"><img src="{% static 'img/password_confirm.png' %}" alt=""></span>
    18                         <input type="password" class="form-control" placeholder="confirm your password" required="" name='password_confirm'>
    19                     </div>
    20 
    21                     <input type="submit" name='register' value="Register" class="btn  btn-success btn-block">
    22                 
    23                     {% csrf_token %}
    24                 </form>
    
    
    
    In your views.py
     1 def register(request):
     2     context={}
     3     if request.method=='GET':
     4         return render(request,'register.html',context)
     5     else:
     6         username=request.POST.get('username')
     7         password_set=request.POST.get('password_set')
     8         password_confirm=request.POST.get('password_confirm')
     9         email=request.POST.get('email')
    #这里可以有更多的验证设置,或者前端验证后传过来
    10 if password_set==password_confirm: 11 Account.objects.create( 12 username=username, 13 password=password_set, 14 email=email, 15 ) 16 return HttpResponse("Register Success") 17 else: 18 return HttpResponse("Your password is not match")


    
    
     1 def login(request):
     2     context={}
     3     if request.method=='GET':
     4         return render(request,'login.html',context)
     5     else:
     6         username=request.POST.get('username')
     7         password=request.POST.get('password')
          #验证用户
    8 user = Account.objects.filter(username__exact=username,password__exact=password) 9 if user is not None : 10 response=redirect(to='contact')
    #设置cookie,后面再讲cooki设置的其他实现方式,这里用手动
    11 response.set_cookie("username",username,max_age=3600) 12 return response 13 else: 14 return HttpResponse("Login failed,please go back to try it again")
    
    

    [需要额外添加验证步骤]

    二、使用Django form

    In your forms.py,

    1 from django import forms
    2 
    3 class Loginfm(forms.Form):
    4     # UI显示名称
    5     username=forms.CharField(label='用户')
    6     password=forms.CharField(label='密码')

    In your views.py

     1 from blogapp.forms import Loginfm
     2 def login(request):
     3     context={}
     4     if request.method=='GET':
     5         loginfm=Loginfm()
     6         context["loginfm"]=loginfm
     7         
     8     else:
     9         loginfm=Loginfm(request.POST)
    10         if loginfm.is_valid():
    11             username=loginfm.cleaned_data['username']
    12             password=loginfm.cleaned_data['password']
    user = Account.objects.filter(username__exact=username,password__exact=password)
    13 if user is not None: 14 response=redirect(to='contact')
    response.set_cookie("username",username,max_age=3600)
    return response
    else:
    return render(request,'login.html',context)

    In your templates,

    1  <form action="" method="POST" class="" role="form">
    2           {{ loginfm.as_p }} 
    3           {% csrf_token %}
    4 </form>

    [Django根据字段属性可以对字段合法性进行检查,比较适合大量的补充信息提交,可以省去很多验证环节]

    --自带样式较为有限,当然你也可以额外补充样式--

    三、ModelForm

    In your forms.py

    1 from blogapp.models import User
    2 class Loginfm(forms.ModelForm):
    3     # 绑定User类
    4     class Meta():
    5         model=User
    6         # 除了'ID'外全部显示,include('ID')只包含'ID',相反
    7         exclude=("id",'email')

    In your views

     1 def login(request):
     2     context={}
     3     if request.method=='GET':
     4         loginfm=Loginfm()
     5         context["loginfm"]=loginfm
     6     else:
     7         loginfm=Loginfm(request.POST)
     8         if loginfm.is_valid():
     9            # loginfm.save()
    10             return HttpResponse("Form submit success")
    11     return render(request,'login.html',context)

    codes in your templates are the same as above(way2)

  • 相关阅读:
    转载:C#制作PDF
    搜索研究
    HDU 4029 Distinct Submatrix [后缀数组]
    HDU 4336 Card Collector [状态压缩概率DP]
    ZOJ 3329 One Person Game [数学期望]
    POJ 2096 Collecting Bugs[数学期望]
    HDU 4338 Simple Path [双联通分量+RMQ(LCA)]
    POJ 1222 EXTENDED LIGHTS OUT [高斯消元]
    HDU 2258 Continuous Same Game (1)[模拟]
    HDU 4339 Query [树状数组]
  • 原文地址:https://www.cnblogs.com/reaptem/p/7286314.html
Copyright © 2011-2022 走看看