1. 程式人生 > >Django1.11 使用者註冊登入(1)

Django1.11 使用者註冊登入(1)

添加註冊登入這個功能,我們就要用到models ,views ,url ,templates。

templates 模板

我們先寫兩個 html 頁面。

register

<form action="{% url 'register' %}" method="post" accept-charset="utf-8"enctype="multipart/form-data" >
   {% csrf_token %}
   <input type="text" name="username"id="username" placeholder="請輸入手機號" >
   <input type
=
"password" name="password" id="password" placeholder="請輸入6-12位密碼" > <input type="submit" class="submit" value="立即註冊"> </form>

login

<form action="{% url 'login' %}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
   {% csrf_token %}
   <input type="text"
name="username" id="username" placeholder="手機號碼" > <input type="password" name="password" id="password" placeholder="登陸密碼" value="" > <input type="submit" value="立即登入"> </form>

將以上表單貼入html
action=”{% url ‘login’ %}” 以及action = {% url ‘register’ %},關聯的是 urls.py 檔案中 url()的name屬性的全域性作用。

models.py 建立資料庫表格

from django.db import models

# Create your models here.
class User(models.Model):
    username = models.CharField(max_length=21)
    password= models.CharField(max_length=21)

建立一個User表格,再資料庫裡的表格名 為 APP名 + User。如app 名為 taobao , 表格名為 taobao_user

建立一個表單的樣式

在app 下建立一個 forms.py檔案

from django import forms

class UserForm(forms.Form):
    username = forms.CharField(max_length=30)
    password = forms.CharField(max_length=50)

views 檢視

from taobao.models import User
# taobao 是 app名
from .forms import UserForm

#註冊
@csrf_exempt
def register_view(req):
    context = {}
    if req.method == 'POST':
        form = UserForm(req.POST)
        if form.is_valid():
            #獲得表單資料
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            #新增到資料庫(還可以加一些欄位的處理)
            User.objects.create(username=username, password=password)
            #新增到session
            req.session['username'] = username
            #重定向到首頁
            return redirect('/')
    else:
        context = {'isLogin':False}
    #將req 、頁面 、以及context{}(要傳入html檔案中的內容包含在字典裡)返回
    return  render(req,'register.html',context)

#登陸
@csrf_exempt
def login_view(req):
    context = {}
    if req.method == 'POST':
        form = UserForm(req.POST)
        if form.is_valid():
            #獲取表單使用者密碼
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            #獲取的表單資料與資料庫進行比較
            user = User.objects.filter(username = username,password = password)
            if user:
                #比較成功,跳轉index
                req.session['username'] = username
                return redirect('/')
            else:
                #比較失敗,還在login
                context = {'isLogin': False,'pawd':False}
                return render(req, 'login.html', context)
    else:
        context = {'isLogin': False,'pswd':True}
    return render(req, 'login.html', context)

#登出    
def logout_view(req):
    #清理cookie裡儲存username
    req.session.flush()
    return redirect('/')

urls.py

直接上程式碼,name 中對應templates 中的 表單中的action

    url(r'^login$', views.login_view,name='login'),
    url(r'^logout', views.logout_view),
    url(r'^register$', views.register_view,name='register'),