利用django和mysql實(shí)現(xiàn)一個(gè)簡單的web登錄頁面
前言:
本文從0到1實(shí)現(xiàn)django搭建一個(gè)web頁面,實(shí)現(xiàn)了django連接mysql數(shù)據(jù)庫,簡單的get、post請求等
一、使用pyacharm創(chuàng)建一個(gè)django項(xiàng)目
略,專業(yè)版直接創(chuàng)建即可
這是初始化創(chuàng)建的第三方庫

二、啟動(dòng)django項(xiàng)目驗(yàn)證
pycharm的terminal輸入
python manage.py runserver

訪問:

小插曲:在啟動(dòng)的時(shí)候報(bào)錯(cuò):‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)]
NameError: name ‘os’ is not defined我的解決方法是:在settings.py文件頭部 import os
網(wǎng)絡(luò)上還有其他方法(博主沒有去試):修改默認(rèn)生成的“‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)]”,修改如下:
‘DIRS’: [Path(BASE_DIR, ‘templates’)]
三、配置mysql數(shù)據(jù)庫
1、本地安裝mysql數(shù)據(jù)庫
1)安裝mysql數(shù)據(jù)庫
我使用的是5.7.22(我的版本),安裝略
2)自己創(chuàng)建一個(gè)數(shù)據(jù)庫
創(chuàng)建一個(gè)數(shù)據(jù)庫名稱: smalldjangodb
2、安裝 pymysql
pip install pymysql

3、配置mysql數(shù)據(jù)庫
1)在項(xiàng)目同名包下的_init_.py里面添加
import pymysql pymysql.install_as_MySQLdb()

2)在settings.py文件中,把DATABASES中的內(nèi)容換掉
先注釋掉默認(rèn)的數(shù)據(jù)庫配置下圖部分

將下面部分復(fù)制進(jìn)去,然后進(jìn)行修改
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',#數(shù)據(jù)庫的類型
'NAME': '', #所使用的的數(shù)據(jù)庫的名字
'USER': 'root', #數(shù)據(jù)庫服務(wù)器的用戶
'PASSWORD': '', #密碼
'HOST': '127.0.0.1', #主機(jī)
'PORT': '3306', #端口
}
}4、django默認(rèn)數(shù)據(jù)遷移
1)執(zhí)行遷移,將項(xiàng)目中原有的應(yīng)用的模型同步遷移到數(shù)據(jù)庫
pycharm的terminal輸入
python manage.py migrate

2)查看數(shù)據(jù)遷移結(jié)果

5、創(chuàng)建一個(gè)后臺(tái)超級(jí)管理員
pycharm的terminal輸入
python manage.py createsuperuser
用戶名、郵箱(隨便輸,格式正確接口)、密碼
這里注冊的是super 密碼qq+名字簡寫(給自己一個(gè)記錄)

四、登錄后臺(tái)系統(tǒng)
1、啟動(dòng)服務(wù)
python manage.py runserver
2、登錄后臺(tái)系統(tǒng)
使用上一步創(chuàng)建的超管賬戶登錄系統(tǒng)
http://127.0.0.1:8000/admin

登錄成功頁面:

五、創(chuàng)建app應(yīng)用
1、命令創(chuàng)建應(yīng)用
pycharm的terminal輸入
python manage.py startapp lucky

2、在settings中的INSTALLED_APPS中配置應(yīng)用
將應(yīng)用lucky加到配置settings中的INSTALLED_APPS

六、配置應(yīng)用路由
1、配置主路由
在應(yīng)用文件夾lucky下面創(chuàng)建一個(gè)子路由文件urls.py

改成如下圖:

多個(gè)應(yīng)用的話,配置多個(gè)主路由
2、配置子應(yīng)用路由

輸入(這里views.toLoginView指的是lucky應(yīng)用下views里面的方法toLoginView,下一步會(huì)說明):
from django.urls import path
from . import views
urlpatterns = [
path('', views.toLoginView, name='toLoginView'),
]3、配置views
打開應(yīng)用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)建一個(gè)示例html頁面
在templates下創(chuàng)建一個(gè)login.html

八、訪問
啟動(dòng)服務(wù)訪問地址:http://127.0.0.1:8000/lucky/

開啟:settings.py開啟debug模式
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
九、優(yōu)化實(shí)現(xiàn)簡單的get與post
1、配置路由
from django.urls import path
from . import views
urlpatterns = [
path('', views.toLoginView),
path('index/', views.loginView),
]2、使用get方式實(shí)現(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)展示成果
啟動(dòng)服務(wù) http://127.0.0.1:8000/lucky/

登錄成功

get請求的缺點(diǎn)是賬戶密碼暴露在URL,所有下面講解post方式
3、使用post方式實(shí)現(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)展示成果
啟動(dòng)服務(wù) http://127.0.0.1:8000/lucky/

十、繼續(xù)優(yōu)化,使用數(shù)據(jù)庫方式進(jìn)行數(shù)據(jù)判斷
1、在model.py當(dāng)中添加數(shù)據(jù)模型

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ù)據(jù)模型遷移到數(shù)據(jù)庫
注意mysql此時(shí)要能支持訪問
python manage.py makemigrations lucky

將數(shù)據(jù)遷移到mysql數(shù)據(jù)庫
python manage.py migrate

到數(shù)據(jù)庫驗(yàn)證:

3、創(chuàng)建數(shù)據(jù)進(jìn)行后續(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("帳號(hào)密碼錯(cuò)誤!")
else:
return HttpResponse("請輸入正確用戶名和密碼!")5、驗(yàn)證


十一、實(shí)現(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文件當(dāng)中創(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("帳號(hào)密碼錯(cuò)誤!")
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、訪問驗(yàn)證
注意訪問路徑要加應(yīng)用名字,這個(gè)路由配置有關(guān)
訪問 http://127.0.0.1:8000/lucky/toregister/

注冊成功

數(shù)據(jù)庫驗(yàn)證

這個(gè)是注冊加了一個(gè)重復(fù)的判斷
# 注冊的邏輯判斷
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("對不起,當(dāng)前賬戶已存在!請換一個(gè)id注冊")
else:
register_user = UserInfo(name=user_name, password=pass_word)
register_user.save()
return HttpResponse("注冊成功!")
else:
return HttpResponse("請輸入完整的用戶名和密碼!")十二、數(shù)據(jù)庫表反映射到django的models
這個(gè)會(huì)將數(shù)據(jù)庫當(dāng)中的全部表都映射過來
# lucky 是django的應(yīng)用名 python manage.py inspectdb>lucky/models.py
總結(jié)
到此這篇關(guān)于利用django和mysql實(shí)現(xiàn)一個(gè)簡單的web登錄頁面的文章就介紹到這了,更多相關(guān)django mysql實(shí)現(xiàn)web登錄頁面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- django如何實(shí)現(xiàn)用戶的注冊、登錄、注銷功能
- django authentication 登錄注冊的實(shí)現(xiàn)示例
- Django 登錄注冊的實(shí)現(xiàn)示例
- Python基于Django實(shí)現(xiàn)驗(yàn)證碼登錄功能
- Django通過自定義認(rèn)證后端實(shí)現(xiàn)多種登錄方式驗(yàn)證
- Django實(shí)現(xiàn)簡單登錄的示例代碼
- Django實(shí)現(xiàn)前后端登錄
- Django中使用pillow實(shí)現(xiàn)登錄驗(yàn)證碼功能(帶刷新驗(yàn)證碼功能)
- 給Django Admin添加驗(yàn)證碼和多次登錄嘗試限制的實(shí)現(xiàn)
- 使用Tastypie登錄Django的問題解決
相關(guān)文章
Python中使用threading.Event協(xié)調(diào)線程的運(yùn)行詳解
這篇文章主要介紹了Python中使用threading.Event協(xié)調(diào)線程的運(yùn)行詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
解決pycharm 格式報(bào)錯(cuò)tabs和space不一致問題
這篇文章主要介紹了解決pycharm 格式報(bào)錯(cuò)tabs和space不一致問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Python比較文件夾比另一同名文件夾多出的文件并復(fù)制出來的方法
這篇文章主要介紹了Python比較文件夾比另一同名文件夾多出的文件并復(fù)制出來的方法,涉及Python針對文件與文件夾的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Python實(shí)現(xiàn)微信機(jī)器人的方法
這篇文章主要介紹了Python實(shí)現(xiàn)微信機(jī)器人的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09

