1、用戶註冊
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
1 ''' 2 註冊的表單模型 3 forms.py 的例子 4 ''' 5 6 from django import forms #表單功能 7 from django.contrib.auth.models import User 8 class RegForm(forms.Form): 9 ''' 10 用戶註冊表單 11 ''' 12 #用戶 13 username = forms.CharField(label='用戶名',max_length=30,min_length=3,widget=forms.TextInput( 14 attrs={'class':'form-control','placeholder':'請輸入用戶名'})) 15 #郵箱 16 email = forms.EmailField(label='郵箱',widget=forms.EmailInput( 17 attrs={'class':'form-control','placeholder':'請輸入郵箱'})) 18 #密碼 19 password = forms.CharField(label='密碼',min_length=8,widget=forms.PasswordInput( 20 attrs={'class':'form-control','placeholder':'請輸入密碼'})) 21 #再次輸入密碼 22 password_again = forms.CharField(label='再次輸入密碼',min_length=8,widget=forms.PasswordInput( 23 attrs={'class':'form-control','placeholder':'請再次輸入密碼'})) 24 25 26 def clean_username(self): 27 ''' 28 清洗輸入的用戶名 29 :return: 清洗後的用戶名 30 ''' 31 username = self.cleaned_data['username'] 32 if User.objects.filter(username=username).exists(): 33 raise forms.ValidationError('用戶名已存在') 34 return username 35 36 37 def clean_email(self): 38 ''' 39 清洗輸入的郵箱 40 :return: 清洗後輸入的郵箱 41 ''' 42 email = self.cleaned_data['email'] 43 if User.objects.filter(email=email).exists(): 44 raise forms.ValidationError('郵箱已存在') 45 return email 46 47 48 def clean_password_again(self): 49 ''' 50 清洗輸入的密碼 51 :return: 輸出對比一致的密碼 52 ''' 53 password = self.cleaned_data['password'] 54 password_again = self.cleaned_data['password_again'] 55 if password != password_again: 56 raise forms.ValidationError('兩次輸入的密碼不一致') 57 return password
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
1 ''' 2 註冊的函數模型 3 views.py樣子 4 ''' 5 from django.shortcuts import redirect,render 6 from django.contrib import auth #django標準的權限管理模型 7 from django.urls import reverse #反向解析 8 from django.contrib.auth.models import User 9 from .forms import RegForm 10 11 def register(request): 12 ''' 13 用戶註冊相關功能處理 14 :param request:請求對象 15 :return: 註冊充公返回首頁,失敗返回註冊表單 16 ''' 17 if request.method == 'POST': 18 reg_form = RegForm(request.POST) 19 if reg_form.is_valid(): 20 username = reg_form.cleaned_data['username'] 21 email = reg_form.cleaned_data['email'] 22 password = reg_form.cleaned_data['password'] 23 user = User.objects.create_user(username=username,email=email,password=password) 24 user.save() 25 user = auth.authenticate(username,password) 26 auth.login(request,user) 27 return redirect(request.GET.get('from',reverse('blog:home'))) 28 else: 29 reg_form = RegForm() 30 context = {'reg_form':reg_form} 31 return render(request,'user/register.html',context)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
<div class="col-xs-11 col-sm-5 col-lg-4 col-sm-offset-4 blog-border side-info"> <h4>歡迎註冊</h4> <form action="" method="POST">{% csrf_token %} {% for field in reg_form %} {# label去冒號 #} <label for="{{ field.id_for_label }}">{{ field.label }}</label> {{ field }} <p class="text-danger">{{ field.errors.as_text }}</p> {% endfor %} {# 錯誤信息標紅 #} <span class="pull-left text-danger">{{ login_form.non_field_errors }}</span> {# <span>用戶名:</span> #} {# <input type="text" name="username"> #} {# <span>密碼:</span> #} {# <input type="password" name="password"> #} <span style="font-weight: bold;">已有賬號?<a style="color: #337ab7;" href="{% url 'user:login' %}">點擊登陸</a></span> <input class="btn btn-primary pull-right" style="margin-bottom: 0.5em" type="submit" value="註冊"> </form> {% if user.is_authenticated %} <script type="text/javascript"> window.location.href = '/'; </script> {% else %} {% endif %} </div>
2、用戶登陸
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
1 ''' 2 用戶登陸表單模型 3 forms.py 的例子 4 ''' 5 from django import forms #表單功能 6 from django.contrib.auth.models import User 7 from django.contrib import auth 8 class LoginForm(forms.Form): 9 ''' 10 用戶登陸 11 ''' 12 username = forms.CharField(label='用戶名', max_length=30, min_length=3, widget=forms.TextInput( 13 attrs={'class': 'form-control', 'placeholder': '請輸入用戶名'})) 14 password = forms.CharField(label='密碼', min_length=8, widget=forms.PasswordInput( 15 attrs={'class': 'form-control', 'placeholder': '請輸入密碼'})) 16 17 18 def clean(self): 19 ''' 20 清洗輸入不合格的表單 21 :return: 清洗後的數據 22 ''' 23 username = self.cleaned_data['username'] 24 password = self.cleaned_data['password'] 25 user = auth.authenticate(username,password) 26 if user is None: 27 raise forms.ValidationError('用戶名或密碼錯誤') 28 else: 29 self.cleaned_data['user'] = user 30 31 return self.cleaned_data
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
1 ''' 2 用戶登陸函數模型 3 views.py樣子 4 ''' 5 from django.shortcuts import redirect,render 6 from django.contrib import auth #django標準的權限管理模型 7 from django.urls import reverse #反向解析 8 from .forms import LoginForm 9 def login_m(request): 10 ''' 11 用戶登陸處理邏輯 12 :param request: 13 :return: 登陸視圖 14 ''' 15 if request.method == 'POST': 16 login_form = LoginForm(request.POST) 17 user = login_form.cleaned_data['user'] 18 auth.login(request,user) 19 referer = request.GET.get('from',reversed('blog:blog')) 20 return redirect(referer) 21 else: 22 login_form = LoginForm() 23 24 context = {'login_form':login_form} 25 return render(request,'user/login.html',context)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
1 <div class="col-xs-11 col-sm-5 col-lg-4 col-sm-offset-4 blog-border side-info"> 2 <h4>用戶登陸</h4> 3 4 <form action="" method="POST"> 5 {% csrf_token %} 6 {% for field in login_form %} 7 <label for="{{ field.id_for_label }}">{{ field.label }}</label> 8 {{ field }} 9 <p class="text-danger">{{ field.errors.as_text }}</p> 10 {% endfor %} 11 {# 錯誤信息標紅 #} 12 <span class="pull-left text-danger">{{ login_form.non_field_errors }}</span> 13 {# <span>用戶名:</span> #} 14 {# <input type="text" name="username"> #} 15 {# <span>密碼:</span> #} 16 {# <input type="password" name="password"> #} 17 <span style="font-weight: bold;">沒有賬號?<a style="color: #337ab7;" href="{% url 'user:register' %}">點擊註冊</a></span> 18 <input class="btn btn-primary pull-right" style="margin-bottom: 0.5em" type="submit" value="登陸"> 19 </form> 20 21 {% if user.is_authenticated %} 22 <script type="text/javascript"> 23 window.location.href = '/'; 24 </script> 25 {% else %} 26 {% endif %} 27 </div>