閱讀目錄
摘要:
Django項(xiàng)目簡(jiǎn)單現(xiàn)實(shí)過(guò)程 pycharm連接數(shù)據(jù)庫(kù) Django之orm簡(jiǎn)單操作增刪改查
一、新建Django項(xiàng)目、配置、設(shè)置:
新建Django項(xiàng)目:(為了熟悉Django操作,暫時(shí)全部用cmd形式來(lái)實(shí)現(xiàn),很多地方需要手動(dòng)添加) 項(xiàng)目目錄D:\Django:
管理員權(quán)限打開(kāi)cmd,通過(guò)cmd命令進(jìn)入項(xiàng)目目錄 django-admin startproject my_Dproject (創(chuàng)建項(xiàng)目) cd my_Dproject (進(jìn)入項(xiàng)目文件夾) python3 manage.py startapp app01 (創(chuàng)建app) pycharm打開(kāi)Django\my_Dproject\my_Dproject\下的settings.py文件,在里面的’INSTALLED_APPS’列表后面添加"app01.apps.App01Config" “或者直接添加簡(jiǎn)寫(xiě)"app01” (注冊(cè)項(xiàng)目app:app01) 在settings.py文件內(nèi):"TEMPLATES"列表里面第二行’DIRS’: [os.path.join(BASE_DIR,‘templates’)] (添加templates文件夾路徑) 在settings.py文件內(nèi)最下面:STATIC_URL = '/static/'下面添加:STATICFILES_DIRS = [os.path.join(BASE_DIR, ‘static’)] (添加靜態(tài)文件夾路徑)
在寫(xiě)注冊(cè)頁(yè)面功能時(shí)候需要在靜態(tài)文件夾內(nèi)static添加bootstrap文件,以便于我們能夠輕松地對(duì)html做一些漂亮的布局。 html文件添加導(dǎo)入jQuery的js文件、 Bootstrap的css和js文件:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
注:如果你對(duì)python感興趣,我這有個(gè)學(xué)習(xí)Python基地,里面有很多學(xué)習(xí)資料,感興趣的
+ Q群:
895817687 < script src
= "https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js" > < / script
> < link rel
= "stylesheet" href
= "/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" > < script src
= "/static/bootstrap-3.3.7-dist/js/bootstrap.min.js" > < / script
>
二、注冊(cè)路徑HTML頁(yè)面創(chuàng)建:
my_Dproject/my_Dproject/urls.py 在url路由文件中添加注冊(cè)功能路徑
在templates文件夾內(nèi)新增register.html頁(yè)面文件用于用戶請(qǐng)求注冊(cè)路徑返回的注冊(cè)頁(yè)面,進(jìn)行注冊(cè)操作
< !DOCTYPE html
>
< html lang
= "en" >
< head
> < meta charset
= "UTF-8" > < title
> 注冊(cè)界面
< / title
> < script src
= "https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js" > < / script
> < link rel
= "stylesheet" href
= "/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" > < script src
= "/static/bootstrap-3.3.7-dist/js/bootstrap.min.js" > < / script
>
< / head
>
< body
>
< div
class = "container" > < div
class = "row" > < h2
class = "text-center" > 注冊(cè)頁(yè)面
< / h2
> < div
class = "col-sm-6 col-sm-offset-3 col-md-6 col-md-offset-3 col-xs-6 col-xs-offset-3" > < form action
= "/register/" method
= "post" > < p
> 用戶名:
< input type = "text" class = "form-control" placeholder
= "請(qǐng)輸入用戶名" name
= "username" id = "i1" > < / p
> < p
> 密碼:
< input type = "text" class = "form-control" placeholder
= "請(qǐng)輸入密碼" name
= "password" id = "i2" > < / p
> < input type = "submit" class = "btn btn-block btn-info" value
= "注冊(cè)提交" > < / form
> < / div
> < / div
>
< / div
>
< / body
>
< / html
>
開(kāi)啟my_Dproject項(xiàng)目,在瀏覽器輸入url:http://127.0.0.1:8000/register/
三、處理用戶注冊(cè)請(qǐng)求、Django連接MysqL數(shù)據(jù)庫(kù)相關(guān)配置、數(shù)據(jù)庫(kù)遷移命令:
Tips:獲取get請(qǐng)求數(shù)據(jù)的方式跟POST請(qǐng)求完全一樣。
獲取到用戶注冊(cè)信息,接下來(lái)需要連接數(shù)據(jù)庫(kù),拿到數(shù)據(jù)庫(kù)的用戶數(shù)據(jù)進(jìn)行驗(yàn)證,注冊(cè)的成功與否。 Django連接MySQL數(shù)據(jù)庫(kù)的方法: my_Dproject/my_Dproject/settings.py 繼續(xù)回到settings配置文件中,來(lái)配置Django連接MySQL
DATABASES
= { 'default' : { 'ENGINE' : 'django.db.backends.mysql' , 'NAME' : 'my_Dproject' , 'HOST' : '127.0.0.1' , 'PORT' : 3306 , 'USER' : 'root' , 'PASSWORD' : '123' , }
}
還沒(méi)完,接著需要去項(xiàng)目的init文件中添加相關(guān)信息,告訴Django用MySQL數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù)就行。
my_Dproject
/ my_Dproject
/ __Init__
. py中添加下面信息:
import pymysqlpymysql
. install_as_MySQLdb
( ) (這里需要注意:__init__
. py文件還在app01文件中有,也可以在app01中的init文件中添加,效果一樣。)
3 配置添加Django中orm的models文件 重點(diǎn):Django的orm不能自動(dòng)幫我們創(chuàng)建數(shù)據(jù)庫(kù),但是可以自動(dòng)幫我們創(chuàng)建表,同時(shí)一個(gè)Django項(xiàng)目就使用一個(gè)數(shù)據(jù)庫(kù) my_Dproject/app01/models.py 中添加映射表的相關(guān)類(lèi) 這里我們需要用到用戶數(shù)據(jù)表,所以創(chuàng)建一張User類(lèi)來(lái)映射MySQL數(shù)據(jù)庫(kù)中的user用戶表
class User ( models
. Model
) : id = models
. AutoField
( primary_key
= True ) name
= models
. CharField
( max_length
= 32 ) password
= models
. CharField
( max_length
= 16 )
映射表的類(lèi)創(chuàng)建完畢后,需要進(jìn)行關(guān)鍵的2步【數(shù)據(jù)庫(kù)遷移命令】操作,才能創(chuàng)建出user表:
第一步:將數(shù)據(jù)庫(kù)變動(dòng)記錄記錄到一個(gè)文件中: 在pycharm自帶的Terminal命令行中輸入: python3 manage.py makemigrations
第二步:將數(shù)據(jù)庫(kù)變動(dòng)同步到數(shù)據(jù)庫(kù)中: python3 manage.py migrate
重點(diǎn):以后只要涉及到數(shù)據(jù)庫(kù)的一絲變動(dòng)(這里主要說(shuō)的是表結(jié)構(gòu)),要想讓變動(dòng)生效一定要執(zhí)行這2步數(shù)據(jù)庫(kù)遷移(同步)命令!!!
這里提一個(gè)小點(diǎn):我們?cè)跍y(cè)試時(shí)候如果遇到下面這種情況: 解決辦法是:在settings.py文件中注釋掉一行代碼: 四、Django之orm對(duì)MysqL數(shù)據(jù)庫(kù)的增刪改查操作簡(jiǎn)介: 利用Django中orm來(lái)查找數(shù)據(jù)庫(kù)中的數(shù)據(jù),對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改、查: 前面我們已經(jīng)拿到用戶提交的注冊(cè)信息:username和password 語(yǔ)法: 增:
新增數(shù)據(jù)
user_obj
= models
. User
. objects
. create
( name
= username
, password
= password
)
user_obj
= models
. User
( name
= username
, password
= password
)
user_obj
. save
( )
查:
user_list
= models
. User
. objects
. all ( )
user_obj
= models
. User
. objects
. all ( ) . first
( ) user_list
= models
. User
. objects
. filter ( password
= 555 )
user_obj
= models
. User
. objects
. filter ( password
= 555 ) . first
( )
Tips:除了用filter定位表記錄的方法,還可以使用.get()方法:
user_obj
= models
. User
. objects
. get
( password
= '555' )
這樣查會(huì)報(bào)錯(cuò):get
( ) returned more than one User
- - it returned
2 !
原因:用get方法是直接獲取單數(shù)據(jù)對(duì)象本身,報(bào)錯(cuò)的原因在于根據(jù)password
= '555' 查詢(xún)的數(shù)據(jù)是
2 個(gè)結(jié)果,那么就不是單個(gè)數(shù)據(jù)對(duì)象,所以就報(bào)錯(cuò)了!強(qiáng)調(diào):用get方法查詢(xún)條件不存在的時(shí)候會(huì)直接報(bào)錯(cuò)。所以:不推薦使用get,推薦使用
filter 查詢(xún),就算條件不存在,會(huì)返回一個(gè)空的QuerySet對(duì)象(
< QuerySet
[ ] > < class 'django
. db
. models
. query
. QueryS
這里引入一個(gè)小點(diǎn):將查詢(xún)到的的所有表記錄傳給html文件,進(jìn)行頁(yè)面渲染之后展現(xiàn)給用戶 templates文件夾內(nèi)創(chuàng)建user_list.html文件:
< !DOCTYPE html
>
< html lang
= "en" >
< head
> < meta charset
= "UTF-8" > < title
> Title
< / title
> < script src
= "https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js" > < / script
> < link rel
= "stylesheet" href
= "/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" > < script src
= "/static/bootstrap-3.3.7-dist/js/bootstrap.min.js" > < / script
>
< / head
>
< body
> < div
class = "container" > < div
class = "row" > < h1
class = "text-center" > 用戶數(shù)據(jù)表
< / h1
> < div
class = "col-md-8 col-md-offset-2" > < table
class = "table-hover table-bordered table-striped table" > < thead
> < tr
> < th
> ID
< / th
> < th
> name
< / th
> < th
> password
< / th
> < / tr
> < / thead
> < tbody
> { % for user_obj
in user_list
% } < tr
> < td
> { { user_obj
. pk
} } < / td
> < td
> { { user_obj
. name
} } < / td
> < td
> { { user_obj
. password
} } < / td
> < / tr
> { % endfor
% } < / tbody
> < / table
> < / div
> < / div
> < / div
>
< / body
>
< / html
>
創(chuàng)建一個(gè)展示用戶數(shù)據(jù)的url路徑: my_Dproject/my_Dproject/urls.py中添加:
url(r'^user_list/', views.user_list)
創(chuàng)建路徑函數(shù): my_Dproject/app01/views.py中加函數(shù):
def user_list ( request
) : user_list
= models
. User
. objects
. all ( ) return render
( request
, 'user_list.html' , { "user_list" : user_list
} ) 后面的字典還可以替換成
locals ( ) ,代表函數(shù)內(nèi)所有變量我當(dāng)做參數(shù)傳進(jìn)前面的html文件中,進(jìn)行動(dòng)態(tài)頁(yè)面渲染:
return render
( request
, 'user_list.html' , locals ( ) )
開(kāi)啟my_Dproject項(xiàng)目,在瀏覽器輸入url:http://127.0.0.1:8000/user_list/ 這就是剛才我們通過(guò)增的操作,創(chuàng)建的user表和表中的2條記錄。
改: 首先需要明白一點(diǎn):改是建立在已經(jīng)查到的數(shù)據(jù)基礎(chǔ)上修改對(duì)應(yīng)字段值的,所以改的前提必須有一個(gè)查的過(guò)程: 鎖定單個(gè)表記錄,用filter:
user_obj
= models
. User
. objects
. filter ( id = edit_id
) . first
( ) 改:
方式一:
models
. User
. objects
. filter ( id = edit_id
) . upadte
( name
= 'banana' , password
= '666' )
注意:方式一update修改的數(shù)據(jù)可能不是一條記錄,有可能把查詢(xún)到的多條記錄的name和password的值全部改成banana和
666 ,類(lèi)似于批量操作。
當(dāng)然如果能確定
filter 對(duì)象的唯一性比如條件為primary_key的
id 那么查找的數(shù)據(jù)肯定是一條記錄,這樣也可看作單個(gè)記錄修改。方式二:
user_obj
= models
. User
. objects
. filter ( id = edit_id
) . first
( )
user_obj
. name
= 'banana'
user_obj
. name
= '666'
user_obj
. save
( )
編輯對(duì)象獲取方式: 我們?cè)诒碛涗浶薷牡臅r(shí)候一般都是需要獲取到該條表記錄的主鍵id值,這樣就能精確定位修改該條記錄了。所以需要一些手段來(lái)傳遞id值:
編輯對(duì)象的
id 的獲取方式
方式
1 : 利用
input 隱藏一個(gè)標(biāo)簽
< input type = "hidden" name
= "edit_id" value
= "{{ user_obj.pk }}" > 方式
2 :
form表單中加入GET請(qǐng)求數(shù)據(jù),在views函數(shù)方法中通過(guò)request
. GET
. get
( edit_id
) 來(lái)獲取需要修改的
id
(雖然請(qǐng)求方式是POST,但可以在標(biāo)簽內(nèi)加入GET請(qǐng)求參數(shù),在views函數(shù)中能夠同時(shí)通過(guò)request
. POST和request
. GET方法拿到不同的數(shù)據(jù))
< form action
= "/edit/?edit_id={{ user_obj.pk }}" method
= "post" >
刪: 刪除和修改方法類(lèi)似:
方法一:
models
. User
. objects
. filter ( password
= '555' ) . delete
( )
方法二:
user_obj
= models
. User
. objects
. filter ( password
= '555' ) . first
( )
user_obj
. delete
( )
最后補(bǔ)充一張Web框架實(shí)現(xiàn)的最基礎(chǔ)的流程圖:(后期不斷完善中…)
總結(jié)
以上是生活随笔 為你收集整理的Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查) 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。