Django第二篇
django第二篇
1.靜態(tài)文件配置
接口前綴:
? STATIC_URL = '/static/'
跟靜態(tài)文件夾的名字沒有關(guān)系,默認(rèn)情況下這個前綴跟靜態(tài)文件夾名字一樣
文件配置
STATICFILES_DIRS = [
? os.path.join(BASE_DIR,'static')
]
'static':就是你的靜態(tài)文件夾路徑,可以設(shè)置多個,會依次查找列表中所有的靜態(tài)文件路勁,找到就停止,都沒有的話返回404(資源不存在)
2.form表單操作
form表單觸發(fā)提交數(shù)據(jù)的動作兩種方式:
<input type='submit'><button></button>form表單提交數(shù)據(jù)地址的指定及方式:
? action屬性控制提交的地址
方式一:全路徑
<form action='http://127.0.0.1:8000/login/'>方式二:只寫路勁后綴
<form action='/login/'>方式三:不寫(默認(rèn)往當(dāng)前路勁提交)
注意:利用a標(biāo)簽href屬性可以指定頁面跳轉(zhuǎn)的路勁,href可以寫全路勁,但是推薦寫后綴即可
<a href='/login/' class='btn btn-success'>登入</a>兩種請求方式(form表單默認(rèn)是get請求)
#根據(jù)客戶端請求方式的不同執(zhí)行不同的邏輯代碼 def login(request):#獲取客戶端的請求方式print(request.method) #注意是全大寫的字符串if request.method == 'POST':return HttpResponse('ok')return render(request,'login.html')獲取請求方式中攜帶的參數(shù)
def login(request):if request.method == 'POST':print(request.POST) #里面存放了客戶端post提交的所有數(shù)據(jù),可以看成是一個大字典,{'username':['lucas'],'password':['123']}print(request.POST.get('username')) #value雖然是一個列表,但是獲取值得時候拿到的是單個元素,默認(rèn)只會取列表里的最后一個元素print(requet.POST.getlist('username')) #一次性獲取value列表里的所有數(shù)據(jù),應(yīng)用場景可以是用戶的愛好,多選框 #get請求的取值方式和post一樣3.django連接數(shù)據(jù)庫
修改配置文件
DATABASES = {'default':{'ENGINE':'django.db.backends.mysql','NAME':'day54', #庫名'HOST':'127.0.0.1','POST':3306,'USER':'root','PASSWORD':'123'} } #注意:鍵必須是大寫替換
? 告訴Django用pymysql替換它,默認(rèn)mysqldb模塊連接數(shù)據(jù)庫
? 方式一:在項目文件夾下面的__init__.py
? 方拾二:在應(yīng)用文件夾下的__init__.py
#固定寫法 import pymysql pymysql.install_as_Mysql()4.orm簡單操作
orm簡介
? orm:對象關(guān)系映射,簡單來說就是類對應(yīng)數(shù)據(jù)庫中的一張表,類對象對應(yīng)表記錄,對象的屬性對應(yīng)某條記錄的值
? django的orm不能自動創(chuàng)建庫,但是可以自動創(chuàng)建表
? 小提示:一個django項目就使用一個庫,不要多個django項目使用一個庫
數(shù)據(jù)庫遷移(同步)命令
? 在models創(chuàng)建好類之后,還需要兩個命令:
? python3(當(dāng)前所用解釋器名稱) manage.py makemigrations:將數(shù)據(jù)庫變動記錄到文件中
? python3 manage.py migrate:將數(shù)據(jù)庫變動同步到數(shù)據(jù)庫中
5.操作數(shù)據(jù)庫
User表插入數(shù)據(jù)
方式一:
user_obj = models.User.objects.create(name=username,password=password) #create方法有一個返回值,就是當(dāng)前新增的數(shù)據(jù)對象本身方式二:
user_obj = models.User(name=password,password=password) user_obj.save()查詢數(shù)據(jù)
獲取User表所有的數(shù)據(jù)
user_list = models.User.objects.all() #獲取user表所有的數(shù)據(jù)上圖中的user_list是QuerySet對象,可以通過點query查看獲取sql語句,QuerySet對象支持索引取值,但是不推薦,推薦使用自帶的.first()來獲取第一條數(shù)據(jù)
獲取單個值
user_query = models.User.objects.filter(id=1) # queryset對象 user_obj = user_query.first() # 數(shù)據(jù)對象 # 當(dāng)條件不存在的情況下會返回一個空的queryset對象,推薦使用 user_obj = models.User.objects.get(id=1) # 用get可以直接獲取到數(shù)據(jù)對象本身,但是查詢條件不存在的情況下直接報錯,所有推薦使用filter刪除數(shù)據(jù)
models.User.objects.filter(id=1).delete() # 會將queryset所有的數(shù)據(jù)對象全部刪除修改數(shù)據(jù)
方式一:
models.User.objects.filter(id=edit_id).update(name=username,password=password) #調(diào)用queryset封裝的方法,該方法是一個批量操作,會將queryset內(nèi)所有的數(shù)據(jù)對象全部修改方式二:
user_obj = models.User.objects.filter(id=edit_id).first() user_obj.name = username user_obj.password = password user_obj.save()上述edit_id獲取方式:
方式一:利用input隱藏一個標(biāo)簽
<input type='hidden' name='edit_id' values='{{user_obj.pk}}'> #django中pk默認(rèn)取的是主鍵字段,User表中id就是主鍵字段方式二:GET請求攜帶
<form action='/edit/?edit_id={{user_obj.pk}}' method='post'></form>上述修改、刪除都是通過queryset對象點的方法完成的,會作用于內(nèi)部所有的數(shù)據(jù)對象,類似于批量操作
注意:修改模型層里面的根表相關(guān)的所有的數(shù)據(jù)之后,必須重新執(zhí)行數(shù)據(jù)庫遷移命令
6.django請求生命周期
轉(zhuǎn)載于:https://www.cnblogs.com/yanminggang/p/10986980.html
總結(jié)
- 上一篇: python变量的输入
- 下一篇: 网格搜索和交叉验证