1. 程式人生 > >【django5】Forms模組

【django5】Forms模組

Python版本3.5,django版本1.10

Django自帶的Forms模組用於伺服器端表單的輸入校驗,不需要自己再對每個輸入格式進行校驗。操作如下

1,使用者編寫自己的類MyForm繼承forms,在類中定義欄位即“message = forms.CharField()”語句,與資料庫類似。Django會自動將該類的例項轉化為HTML表單輸入語句。

2,在views.py中將表單傳來的值賦予自定義類例項,即“form1 = MyForm(request.POST)”,呼叫forms類自帶is_valid()方法判斷表單輸入是否是自定義類中欄位型別,即“form1.is_valid()”,通過cleaned_data屬性獲取通過檢驗的資料,即“form1.cleaned_data”。

3,將自定義類例項放在html模板中。

注意:

第1步中form子類中定義欄位時,常用屬性如下:

        required屬性表示該欄位是否必填,

        error_messages屬性表示錯誤提示資訊,

        max_length屬性表示最長輸入,

        widget屬性表示控制元件型別,

        label屬性表示在html中的label

第2步中檢視對輸入的處理

        is_valid()方法檢查輸入,

        errors屬性顯示不正確的原因,

        若正確cleaned_data屬性獲取乾淨資料,

第3步html模板對form例項的引用,若是直接{{form1}},不是特別美觀,可以通過訪問{{form.欄位名}}進行單獨的渲染。


示例如下:

1 新建專案

    django-admin.py startproject website3

2 啟動伺服器,檢視是否正常

    manage.py runserver

3 進入工程website3一級資料夾下新建app

    python manage.py startapp account

4 將新建立的app加入工程中

    修改 website3/website3/settings.py的INSTALL_APPS,將app名稱加入該元組中。

5 修改website3/urls.py檔案

from django.conf.urls import url
from django.contrib import admin
from account import views as account_views

urlpatterns = [
    url(r'^admin/', admin.site.urls),

    url(r'^login/', account_views.login, name='login'),
    url(r'^home/', account_views.home, name='home'),
]

6 在account資料夾下新建forms.py檔案

from django import forms

class LoginForm(forms.Form):
	username = forms.CharField(required=True, max_length=20, min_length=6)
	password = forms.CharField(required=True, max_length=20, min_length=6)

7 修改views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import LoginForm
# Create your views here.
def home(request):
	return render(request, 'account/home.html')

def login(request):
	if request.method == 'POST':
		form = LoginForm(request.POST)
		if form.is_valid():
			a = form.cleaned_data['username']
			b = form.cleaned_data['password']
			# 查詢資料庫進行驗證,並放入session進行登陸判斷
			return HttpResponseRedirect('/home')
	else:
		form = LoginForm()
	return render(request, 'account/login.html', {'form':form})

或者

from django.shortcuts import render
from django.http import HttpResponseRedirect

from .forms import LoginForm
# Create your views here.
def home(request):
	s = request.session.get('username', default=None)
	return render(request, 'account/home.html', {'username':s})

def login(request):
	if request.method == 'POST':
		form = LoginForm(request.POST)
		if form.is_valid():
			a = form.cleaned_data['username']
			b = form.cleaned_data['password']
			# 查詢資料庫進行驗證,並放入session進行登陸判斷
			request.session['username'] = a # 儲存使用者名稱在session中  
			return HttpResponseRedirect('/home')
			
	return render(request, 'account/login.html')

8 新增html

login.html

上文中view.py第二個版本對應下面這個html,若用第一個版本則在模板中用{{form.username}}/{{form.password}}代替<input>部分

<!DOCTYPE html>
<html>
<head lang="en">
	<meta charset="UTF-8">
	<title>登陸</title>
	<style>
	html{    
		width: 100%;    
		height: 100%;    
		overflow: hidden;    
		font-style: sans-serif;    
		}    
	body{    
		width: 100%;    
		height: 100%;    
		font-family: 'Open Sans',sans-serif;    
		margin: 0;    
		background-color: #4A374A;    
		}    
	#login{    
		position: absolute;    
		top: 50%;    
		left:50%;    
		margin: -150px 0 0 -150px;    
		width: 300px;    
		height: 300px;    
		}    
	#login h1{    
		color: #fff;    
		text-shadow:0 0 10px;    
		letter-spacing: 1px;    
		text-align: center;    
		}    
	h1{    
		font-size: 2em;    
		margin: 0.67em 0;    
	}    
	input{    
		width: 278px;    
		height: 18px;    
		margin-bottom: 10px;    
		outline: none;    
		padding: 10px;    
		font-size: 13px;    
		color: #fff;    
		text-shadow:1px 1px 1px;    
		border-top: 1px solid #312E3D;    
		border-left: 1px solid #312E3D;    
		border-right: 1px solid #312E3D;    
		border-bottom: 1px solid #56536A;    
		border-radius: 4px;    
		background-color: #2D2D3F;    
		}    
	.but{    
		width: 300px;    
		min-height: 40px;    
		display: block;    
		background-color: #4a77d4;    
		border: 1px solid #3762bc;    
		color: #fff;    
		padding: 9px 14px;    
		font-size: 15px;    
		line-height: normal;    
		border-radius: 5px;    
		margin: 0;
		}   
	</style>
</head>
<body>
	<div id="login">
	<h1>系統登陸</h1>
	<form method='post'>
		{% csrf_token %}
		<input type="text" required="required" placeholder="使用者名稱" name="username"></input>   
		<input type="password" required="required" placeholder="密碼" name="password"></input>  
		<input class="but" type="submit" value="登入">
	</form>
	</div>
</body>
</html>

效果圖