利用django和mysql實現(xiàn)一個簡單的web登錄頁面
前言:
本文從0到1實現(xiàn)django搭建一個web頁面,實現(xiàn)了django連接mysql數(shù)據庫,簡單的get、post請求等
一、使用pyacharm創(chuàng)建一個django項目
略,專業(yè)版直接創(chuàng)建即可
這是初始化創(chuàng)建的第三方庫
二、啟動django項目驗證
pycharm的terminal輸入
python manage.py runserver
訪問:
小插曲:在啟動的時候報錯:‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)]
NameError: name ‘os’ is not defined我的解決方法是:在settings.py文件頭部 import os
網絡上還有其他方法(博主沒有去試):修改默認生成的“‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)]”,修改如下:
‘DIRS’: [Path(BASE_DIR, ‘templates’)]
三、配置mysql數(shù)據庫
1、本地安裝mysql數(shù)據庫
1)安裝mysql數(shù)據庫
我使用的是5.7.22(我的版本),安裝略
2)自己創(chuàng)建一個數(shù)據庫
創(chuàng)建一個數(shù)據庫名稱: smalldjangodb
2、安裝 pymysql
pip install pymysql
3、配置mysql數(shù)據庫
1)在項目同名包下的_init_.py里面添加
import pymysql pymysql.install_as_MySQLdb()
2)在settings.py文件中,把DATABASES中的內容換掉
先注釋掉默認的數(shù)據庫配置下圖部分
將下面部分復制進去,然后進行修改
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql',#數(shù)據庫的類型 'NAME': '', #所使用的的數(shù)據庫的名字 'USER': 'root', #數(shù)據庫服務器的用戶 'PASSWORD': '', #密碼 'HOST': '127.0.0.1', #主機 'PORT': '3306', #端口 } }
4、django默認數(shù)據遷移
1)執(zhí)行遷移,將項目中原有的應用的模型同步遷移到數(shù)據庫
pycharm的terminal輸入
python manage.py migrate
2)查看數(shù)據遷移結果
5、創(chuàng)建一個后臺超級管理員
pycharm的terminal輸入
python manage.py createsuperuser
用戶名、郵箱(隨便輸,格式正確接口)、密碼
這里注冊的是super 密碼qq+名字簡寫(給自己一個記錄)
四、登錄后臺系統(tǒng)
1、啟動服務
python manage.py runserver
2、登錄后臺系統(tǒng)
使用上一步創(chuàng)建的超管賬戶登錄系統(tǒng)
http://127.0.0.1:8000/admin
登錄成功頁面:
五、創(chuàng)建app應用
1、命令創(chuàng)建應用
pycharm的terminal輸入
python manage.py startapp lucky
2、在settings中的INSTALLED_APPS中配置應用
將應用lucky加到配置settings中的INSTALLED_APPS
六、配置應用路由
1、配置主路由
在應用文件夾lucky下面創(chuàng)建一個子路由文件urls.py
改成如下圖:
多個應用的話,配置多個主路由
2、配置子應用路由
輸入(這里views.toLoginView指的是lucky應用下views里面的方法toLoginView,下一步會說明):
from django.urls import path from . import views urlpatterns = [ path('', views.toLoginView, name='toLoginView'), ]
3、配置views
打開應用lucky目錄下的views
from django.shortcuts import render # Create your views here. def toLoginView(request): return render(request, 'login.html')
七、創(chuàng)建html頁面
1、確定模版配置是否正確
2、創(chuàng)建一個示例html頁面
在templates下創(chuàng)建一個login.html
八、訪問
啟動服務訪問地址:http://127.0.0.1:8000/lucky/
開啟:settings.py開啟debug模式
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
九、優(yōu)化實現(xiàn)簡單的get與post
1、配置路由
from django.urls import path from . import views urlpatterns = [ path('', views.toLoginView), path('index/', views.loginView), ]
2、使用get方式實現(xiàn)
1)配置views頁面
from django.http import HttpResponse from django.shortcuts import render # Create your views here. def toLoginView(request): return render(request, 'login.html') def loginView(request): username = request.GET.get('user', '') # 后面的''表示獲取不到user就賦值空 password = request.GET.get('pwd', '') if username and password: return HttpResponse("登錄成功") else: return HttpResponse("登錄失敗")
2)優(yōu)化登錄頁面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登錄</title> </head> <body> <form action="/lucky/index/" method="get"> <p><label>用戶名:</label><input name="user" /></p> <p><label>密碼:</label><input name="pwd" /></p> <input type="submit" value="登錄"> </form> </body> </html>
3)展示成果
啟動服務 http://127.0.0.1:8000/lucky/
登錄成功
get請求的缺點是賬戶密碼暴露在URL,所有下面講解post方式
3、使用post方式實現(xiàn)
1)配置views頁面
from django.http import HttpResponse from django.shortcuts import render # Create your views here. def toLoginView(request): return render(request, 'login.html') def loginView(request): username = request.POST.get('user', '') # 后面的''表示獲取不到user就賦值空 password = request.POST.get('pwd', '') # if username=='admin' and password=='1': if username and password: return HttpResponse("登錄成功") else: return HttpResponse("登錄失敗")
2)優(yōu)化登錄頁面
將上面的get修改為post即可
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登錄</title> </head> <body> <form action="/lucky/index/" method="post"> <p><label>用戶名:</label><input name="user" /></p> <p><label>密碼:</label><input name="pwd" /></p> <input type="submit" value="登錄"> </form> </body> </html>
3)展示成果
啟動服務 http://127.0.0.1:8000/lucky/
十、繼續(xù)優(yōu)化,使用數(shù)據庫方式進行數(shù)據判斷
1、在model.py當中添加數(shù)據模型
from django.db import models # Create your models here. class UserInfo(models.Model): id = models.CharField(primary_key=True,max_length=20) name = models.CharField(max_length=20) password = models.CharField(max_length=20)
2、將數(shù)據模型遷移到數(shù)據庫
注意mysql此時要能支持訪問
python manage.py makemigrations lucky
將數(shù)據遷移到mysql數(shù)據庫
python manage.py migrate
到數(shù)據庫驗證:
3、創(chuàng)建數(shù)據進行后續(xù)操作
4、修改views.py
from django.http import HttpResponse from django.shortcuts import render from .models import * # Create your views here. def toLoginView(request): return render(request, 'login.html') def loginView(request): user_name = request.POST.get('user', '') # 后面的''表示獲取不到user就賦值空 pass_word = request.POST.get('pwd', '') # if user_name=='admin' and pass_word=='1': if user_name and pass_word: exit_user =UserInfo.objects.filter(name= user_name,password = pass_word).count() if exit_user >= 1: return HttpResponse("登錄成功!") else: return HttpResponse("帳號密碼錯誤!") else: return HttpResponse("請輸入正確用戶名和密碼!")
5、驗證
十一、實現(xiàn)注冊
1、注冊頁面
在templates下創(chuàng)建register.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注冊</title> </head> <body> <form action="/lucky/register/" method="post"> {% csrf_token %} <p><label>用戶名:</label><input name="user" /></p> <p><label>密碼:</label><input name="pwd" /></p> <input type="submit" value="注冊"> </form> </body> </html>
2、配置路由
from django.urls import path from . import views urlpatterns = [ path('', views.toLoginView), path('index/', views.loginView), path('toregister/', views.toRegisterView), path('register/', views.registerView), ]
3、創(chuàng)建注冊方法
到views.py文件當中創(chuàng)建registerView方法和toRegisterView方法
from django.http import HttpResponse from django.shortcuts import render from .models import * # Create your views here. def toLoginView(request): return render(request, 'login.html') def loginView(request): user_name = request.POST.get('user', '') # 后面的''表示獲取不到user就賦值空 pass_word = request.POST.get('pwd', '') # if user_name=='admin' and pass_word=='1': if user_name and pass_word: exit_user = UserInfo.objects.filter(name=user_name, password=pass_word).count() if exit_user >= 1: return HttpResponse("登錄成功!") else: return HttpResponse("帳號密碼錯誤!") else: return HttpResponse("請輸入正確用戶名和密碼!") # 渲染注冊頁面 def toRegisterView(request): return render(request, 'register.html') # 注冊的邏輯判斷 def registerView(request): user_name = request.POST.get('user', '') pass_word = request.POST.get('pwd', '') if user_name and pass_word: register_user = UserInfo(name=user_name, password=pass_word) register_user.save() return HttpResponse("注冊成功!") else: return HttpResponse("請輸入完整的用戶名和密碼!")
4、訪問驗證
注意訪問路徑要加應用名字,這個路由配置有關
訪問 http://127.0.0.1:8000/lucky/toregister/
注冊成功
數(shù)據庫驗證
這個是注冊加了一個重復的判斷
# 注冊的邏輯判斷 def registerView(request): user_name = request.POST.get('user', '') pass_word = request.POST.get('pwd', '') if user_name and pass_word: exit_user = UserInfo.objects.filter(name=user_name).count() if exit_user: return HttpResponse("對不起,當前賬戶已存在!請換一個id注冊") else: register_user = UserInfo(name=user_name, password=pass_word) register_user.save() return HttpResponse("注冊成功!") else: return HttpResponse("請輸入完整的用戶名和密碼!")
十二、數(shù)據庫表反映射到django的models
這個會將數(shù)據庫當中的全部表都映射過來
# lucky 是django的應用名 python manage.py inspectdb>lucky/models.py
總結
到此這篇關于利用django和mysql實現(xiàn)一個簡單的web登錄頁面的文章就介紹到這了,更多相關django mysql實現(xiàn)web登錄頁面內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中使用threading.Event協(xié)調線程的運行詳解
這篇文章主要介紹了Python中使用threading.Event協(xié)調線程的運行詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python比較文件夾比另一同名文件夾多出的文件并復制出來的方法
這篇文章主要介紹了Python比較文件夾比另一同名文件夾多出的文件并復制出來的方法,涉及Python針對文件與文件夾的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03