前面寫了一篇關於登錄的案例,當時案例把登錄的賬號密碼都寫死了,如果賬號密碼正確就登錄到安靜的博客中,如果失敗就提示用戶名或者密碼錯誤。這里我們完善一下注冊和登錄並且同步給數據庫
需求內容
進入到注冊頁面,完成注冊后,數據同步到數據庫中,然后跳轉到登錄頁面,如果注冊賬號存在就返回提示用戶已存在,賬號密碼正確登錄成功后跳轉到安靜博客園地址,失敗的話就提示用戶名密碼錯誤
注冊頁面
其中{{ error_name }}表示接收錯誤提示內容
# register.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注冊</title> </head> <body> <h1> <p style="text-align:center">新用戶注冊</p> </h1> <center> <form action="" method="post"> {% csrf_token %} <p style="text-align:center">用戶:<input type="text" name="username" /></p> <p style="text-align:center">郵箱:<input type="text" name="email"/> </p> <p style="text-align:center">密碼:<input type="password" name="password"/></p> <input type="submit" value="注冊" /> <p style="color: red;text-align: center">{{ error_name }}</p> </form> </body> </html>
數據添加到數據庫
我們需要創建一個數據庫,把注冊的信息用戶名,郵箱,密碼添加到數據庫中,需要創建對用的表。其中創建了一個自生成的主鍵
# model.py
from django.db import models class User(models.Model): id = models.AutoField(primary_key=True) # 創建一個主鍵 username = models.CharField(max_length=32) # 用戶名 password = models.CharField(max_length=32) # 密碼 email = models.CharField(max_length=32) # 郵箱
在創建完表后,千萬不要忘記同步數據庫,輸入下面兩條命令
# 同步數據庫 python manage.py makemigrations # 創建數據庫 python manage.py migrate
注冊存儲數據庫中
在views.py文件中創建一個函數,把注冊的內容寫進去
# views.py from django.shortcuts import render,redirect from Anjing import models def register(request): # 定義一個錯誤提示為空 error_name = '' if request.method=='POST': user = request.POST.get('username') password = request.POST.get('password') email = request.POST.get('email') user_list = models.User.objects.filter(username=user) if user_list : # 注冊失敗 error_name = '%s用戶名已經存在了' % user # 返回到注冊頁面,並且把錯誤信息報出來 return render(request,'register.html',{'error_name':error_name}) else: # 數據保存在數據庫中,並返回到登錄頁面 user = models.User.objects.create(username=user, password=password, email=email) user.save()
# 同ip下跳轉 return redirect('/login/')
return render(request,'register.html')
同樣也需要在urls.py文件中映射我們的地址
# urls.py from django.contrib import admin from django.urls import path from Anjing import views urlpatterns = [ path('admin/', admin.site.urls), path('login/', views.login), # 登錄 path('register/', views.register), # 注冊 ]
啟動Django http://127.0.0.1:8000/register/ 進入到注冊頁面,輸入想要注冊的用戶名賬號,點擊注冊,直接跳轉到了登錄頁面
如果注冊用戶名存在的話,直接報用戶名已經存在
打開數據庫查看數據已經入庫了
登錄流程
前面已經寫過一個登錄流程了,但是沒有獲取數據庫的數據,改下上一篇的代碼把寫死的賬號密碼,直接與數據庫進行對比,如果存在就登錄成功,如果失敗就提示用戶名密碼錯誤
# view.py from django.shortcuts import render,redirect from Anjing import models def login(request): # 定一個為空的錯誤接收 error_msg = '' if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # 判斷數據庫中有沒有賬號密碼 ret = models.User.objects.filter(username=username, password=password) if ret: # 登錄到安靜博客 return redirect('https://www.cnblogs.com/qican/') else: # 登錄失敗 error_msg = '用戶名或密碼錯誤,請重新輸入!' return render(request, 'login.html', {'error_msg':error_msg})
再次啟動Django輸入 http://127.0.0.1:8000/login/ 進行輸入剛才的賬號密碼可以看到已經登錄到安靜的博客園中了
如果這里輸入錯誤的賬號密碼的話就會提示用戶名密碼錯誤
這里就把注冊和登錄的數據都是有數據庫中提取了。
PS:流程和代碼可能有點亂,沒有寫過多少Django,也是初學者,如果有錯誤的或者不懂的歡迎大家留言,我們共同學習~