1. 程式人生 > >【django4】簡單註冊/登陸/登出功能

【django4】簡單註冊/登陸/登出功能

Python版本3.5,django版本1.10
1 新建專案
    django-admin.py startproject website1
2 啟動伺服器,檢視是否正常
    manage.py runserver
3 進入工程website1一級資料夾下新建app
    python manage.py startapp account
4 將新建立的app加入工程中
    修改 website1/website1/settings.py的INSTALL_APPS,將app名稱加入該元組中。
5 修改website1/urls.py檔案

from django.conf.urls import url, include
from account import views as account_views
urlpatterns = [
    url(r'^index/', account_views.index),       # 使用者主介面
    url(r'^register/', account_views.register), # 註冊介面
    url(r'^login/', account_views.login),       # 登陸介面
    url(r'^logout/', account_views.logout),     # 登出介面
]

6  修改views.py

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

# Create your views here.
def index(request):
	s = request.session.get('username', default=None)
	if s:
		return render(request, 'account/index.html', {'username':s}) # 跳轉至使用者主介面
	else:
		return HttpResponseRedirect('/login')

def register(request):
	if request.method == 'POST': # 使用者輸入賬戶密碼後提交表單
		username = request.POST['username']
		password = request.POST['password']
		UserModel.objects.create(username=username, password=password) # 寫入資料庫
		return render(request, 'account/regok.html')
	else: # 使用者直接訪問註冊頁面
		return render(request, 'account/register.html')

def login(request):
	if request.method == 'POST': # 使用者輸入賬戶密碼後提交表單
		username = request.POST['username']
		password = request.POST['password']
		hasUser = UserModel.objects.filter(username=username, password=password)
		if hasUser: # 該使用者存在
			request.session['username'] = username # 儲存使用者名稱在session中
			return render(request, 'account/index.html', {'username':username}) # 跳轉至使用者主介面
		else:
			return render(request, 'account/login.html')
	else: # 使用者直接訪問登陸頁面
		return render(request, 'account/login.html')

def logout(request):
	try:
		del request.session['username'] # 將使用者名稱從session中刪除
	except KeyError:
		pass
	return render(request, 'account/logout.html')

7 編寫HTML

index.html

<!DOCTYPE html>
<html>
<head lang="en">
	<meta charset="UTF-8">
	<title>使用者中心</title>
</head>
<body>
	歡迎您,{{username}}
	<a href="/logout">退出</a>
</body>
</html>

login.html

<!DOCTYPE html>
<html>
<head lang="en">
	<meta charset="UTF-8">
	<title>登陸</title>
</head>
<body>
	<h2>請登陸</h2>
	<form method="post">
		{% csrf_token %}
		使用者:<input name="username" type="text" ><br/>
		密碼:<input name="password" type="password" ><br/>
		<input type="submit" value="登陸" >
	</form>
</body>
</html>

register.html

<!DOCTYPE html>
<html>
<head lang="en">
	<meta charset="UTF-8">
	<title>註冊</title>
</head>
<body>
	<form method="post">
		{% csrf_token %}
		使用者:<input name="username" type="text" ><br/>
		密碼:<input name="password" type="password" ><br/>
		<input type="submit" value="註冊" >
	</form>
</body>
</html>

regok.html

<!DOCTYPE html>
<html>
<head lang="en">
	<meta charset="UTF-8">
	<title>註冊成功</title>
</head>
<body>
	<h2>註冊成功!</h2>
	點選<a href="/login">這裡</a>跳轉至登陸介面
</body>
</html>

logout.html

<!DOCTYPE html>
<html>
<head lang="en">
	<meta charset="UTF-8">
	<title>登出</title>
</head>
<body>
	已登出!
</body>
</html>

8 models.py中的模型

from django.db import models
# Create your models here.
class UserModel(models.Model):
	username = models.CharField(max_length=30)
	password = models.CharField(max_length=30)

	def __str__(self):
		return self.username+", "+self.password

系統並沒有對註冊和登陸的輸入進行檢測,也沒有對重複註冊進行檢測,用session變數判斷使用者是否登陸。

其實,django中自帶了很多模組可以快速建立使用者註冊登入系統,相關模組如下;

Froms模組,代替表單中的輸入部分,對輸入進行檢查

User模組:代替上文中自己編寫的UserModel模型,具有更多欄位

auth模組:對使用者輸入進行驗證

login模組:代替上文中session變數部分,django自動判斷使用者是否登陸或登出

下一篇文章將介紹如何應用Django自帶模組構建使用者註冊登入系統。