iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 29
1
Modern Web

From Django 1.11 to Django 2.1 系列 第 29

Day29 : Django 註冊

前言

Day28,我們了解如何使用 Django 來作登入、登出

那今天我們就來講 申請帳戶,讓這個功能更完整吧!


正文開始

目前我們已經知道,只要引用 path('accounts/', include('django.contrib.auth.urls')),就等於是有以下的路徑可以使用!

accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']

但是這裡並沒有註冊的功能,因此我們必須自己來刻一個

聽起來好像很難,但你不用擔心 ^^"

Django 只是放在不同的地方而已 UserCreationForm

因為它是一個 ModelForm,所以這類別已經跟內見資料庫綁定了!

所以我們只要撰寫邏輯就可以了,很簡單吧!

首先,我們先在 top-level 的 views.py 撰寫邏輯吧!

from django.contrib.auth.forms import UserCreationForm # 新增
def register(request):
	if request.method == 'POST':
		form = UserCreationForm(request.POST)
		print("Errors", form.errors)
		if form.is_valid():
			form.save()
			return redirect('')
		else:
			return render(request, 'registration/register.html', {'form':form})
	else:
		form = UserCreationForm()
		context = {'form': form}
		return render(request, 'registration/register.html', context)

接著在 top-level 的 urls.py 修改

from .views import test, register # 新增 register
from django.contrib import admin
from django.urls import path, include
from .views import test, register
from django.views.generic.base import TemplateView
urlpatterns = [
	...略
    path('register/', register, name='register'),
]

最後在 templates 底下的 registration 新增 register.html

{% extends 'base.html' %}
{% block title %}
Register Page
{% endblock title %}
{% block content %}
  <form method="POST">
      {% csrf_token %}
      {{ form.as_p }}
      {% for field in form %}
        {{ field.errors }}
      {% endfor %}
  <button type="submit">送出</button>
{% endblock content %}

就可以有這樣子的畫面囉!
https://ithelp.ithome.com.tw/upload/images/20181029/201118296hsKQ0vVjQ.jpg

接著試著輸入資料來測試你可以發現,檢查欄位的工作 Django 都幫你做好了,是不是很方便呢 ^^

https://ithelp.ithome.com.tw/upload/images/20181029/201118299RvmQnRpd1.jpg

密碼設定得不夠好也是
https://ithelp.ithome.com.tw/upload/images/20181029/20111829ivNaaBZczr.jpg

只要註冊成功,就會將註冊帳密儲存至資料庫,並把畫面轉換至根目錄 redirect('/')

https://ithelp.ithome.com.tw/upload/images/20181029/20111829QfQpxaXedl.jpg

接著,我們透過 管理員 來看是否成功建立這個使用者!
https://ithelp.ithome.com.tw/upload/images/20181029/20111829lUEtI5vjSo.jpg

你就可以發現我們註冊成功囉! (歡呼
因此我們也能夠在登入介面完成登入的動作囉!
https://ithelp.ithome.com.tw/upload/images/20181029/20111829JXMWmM8w8S.jpg


今日小節

今天透過昨天的登入/登出介面,再進階跟大家說明註冊的功能,如此一來,我們的登入介面的功能又更齊全一點囉!

今天就先講到這,我們明天見 ^^!


上一篇
Day28 : Django auth - 登入/登出
下一篇
Day30 : Django 第三方登入 - 以Github為例
系列文
From Django 1.11 to Django 2.1 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言