一個網站上新用戶註冊,會寫個註冊頁面,若是用django寫個註冊頁面的流程呢?
本篇以post請求示例,從html頁面上輸入用戶註冊信息,提交到後臺處理數據,而後傳參數據到User數據庫表裏面html
註冊頁面設計,需輸入用戶名(必填)、密碼(必填)、郵箱(非必填),點註冊按鈕提交表單ajax
templates/register.html數據庫
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>註冊頁面</title> </head> <body> <h1>新用戶註冊!</h1> <form action="" method="post"> {% csrf_token %} <p> 用戶名:<input type="text" id="id_username" name="username", required="required"> * {{rename}} </p> <p> 密碼:<input type="text" id="id_username" name="password", required="required"> * </p> <p> 註冊郵箱:<input type="text" id="id_username" name="mail"> </p> <p> <input type="submit" value="註冊"> </p> </form> </body> </html>
註冊成功後,但願能跳轉到用戶登陸頁面,因此還須要寫個登陸頁面的html,登陸邏輯暫時沒寫。
templates/login.htmldjango
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登陸頁面</title> </head> <body> <h1>歡迎登陸!</h1> <form action="/" method="post"> {% csrf_token %} <p> 用戶名:<input type="text" id="id_username" name="username", required="required"> * </p> <p> 密碼:<input type="text" id="id_username" name="password", required="required"> * </p> <p> <input type="submit" value="登陸"> </p> </form> </body> </html>
post請求form下面加個 {% csrf_token %} 防止跨站點僞造請求瀏覽器
CSRF, Cross Site Request Forgery, 跨站點僞造請求。服務器
舉例來說,某個惡意的網站上有一個指向你的網站的連接,若是某個用戶已經登陸到你的網站上了,那麼當這個用戶點擊這個惡意網站上的那個連接時,就會向你的網站發來一個請求,你的網站會覺得這個請求是用戶本身發來的,其實呢,這個請求是那個惡意網站僞造的。cookie
django 第一次響應來自某個客戶端的請求時,會在服務器端隨機生成一個 token,把這個 token 放在 cookie 裏。而後每次 POST 請求都會帶上這個 token,這樣就能避免被 CSRF 攻擊。函數
接下來寫個視圖函數接收register.html頁面的請求參數,如何寫入User表,這張表前面已經建立過了,數據以下圖。
關於寫入User表操做參考前面一篇http://www.javashuo.com/article/p-ochaplro-be.htmlpost
# views.py from django.shortcuts import render from hello.models import User # Create your views here. def register(request): '''註冊頁面''' res = "" if request.method == "POST": username = request.POST.get('username') psw = request.POST.get('password') mail = request.POST.get('mail') # 先查詢數據庫是否有此用戶名 user_lst = User.objects.filter(user_name=username) if user_lst: # 若是已經註冊過,就給個提示 res = "%s用戶已被註冊" % username return render(request, 'register.html', {'rename': res}) else: # 若是沒被註冊,插入數據庫 # 第一種寫法 -- 推薦 user = User() user.user_name = username user.psw = psw user.mail = mail user.save() # 第二種寫法 # user = User(user_name=username, # psw = psw, # mail = mail, # ) # user.save() return render(request, 'login.html', {'rename': res}) return render(request, 'register.html') def login(request): '''登陸頁面''' return render(request, 'login.html')
urls.py訪問地址網站
from django.conf.urls import url from hello import views urlpatterns = [ # 新增用戶 url(r'^register/', views.register), url(r'^login/', views.login), ]
瀏覽器輸入地址:http://localhost:8000/register/
若是用戶名已經註冊過,頁面會給出提示,新用戶註冊成功後會跳轉到登陸頁面。