外掛網(wǎng)站怎么做廣告代理商
文章目錄
- 一、靜態(tài)文件及相關(guān)配置
- 1.以登錄功能為例
- 2.靜態(tài)文件
- 3.資源訪問
- 4.靜態(tài)文件資源訪問
- 如何解決?
- 二、靜態(tài)文件相關(guān)配置
- 1. 如何配置靜態(tài)文件配置?
- 2.接口前綴
- 3. 接口前綴動態(tài)匹配
- 4. form表單
- 請求方法補(bǔ)充
- form表單要注意的點(diǎn)
- 三、request對象方法
- request請求結(jié)果
- 代碼展示
- 四、Django連接數(shù)據(jù)庫
- pycharm連接MySql
- Django連接MySQL
- 五、Django ORM簡介
- 基本ORM操作(數(shù)據(jù)的遷移)
- 關(guān)于數(shù)據(jù)庫遷移失敗的原因
- Django ORM字段增刪改查
- Django ORM數(shù)據(jù)增刪改查
一、靜態(tài)文件及相關(guān)配置
1.以登錄功能為例
login.html頁面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="../static/bootstrap-3.4.1-dist/css/bootstrap.min.css"><script src="../static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body><div><div class="container"><div class="row"><h1 class="text-center">用戶登錄</h1><div class="col-md-8 col-md-offset-w"><form action=""><p>username:<input type="text" class="form-control"></p><p>password:<input type="text" class="form-control"></p><input type="submit" class="btn btn-success btn-block" value="用戶登錄"></form></div></div></div>
</div>
2.靜態(tài)文件
不經(jīng)常變化的文件,主要針對html文件所使用到的各種資源,比如css文件、js文件、img文件、第三方框架文件
Django針對靜態(tài)文件資源需要單獨(dú)開一個(gè)目錄,統(tǒng)一存放在static文件夾里
static目錄 該目錄下類型文件居多可再分css目錄js目錄img目錄utils目錄/plugins目錄/libs目錄/others目錄/不創(chuàng)
3.資源訪問
我們在地址欄之所以輸入路由獲取到相對應(yīng)的資源,是因?yàn)槌绦騿T提前開設(shè)了資源接口,比如在網(wǎng)址輸入127.0.0.1:8000/admin,就能訪問對應(yīng)的接口資源
4.靜態(tài)文件資源訪問
直接引入css和js是不能直接使用動態(tài)效果的,想要靜態(tài)文件配置添加,添加了bootstrap之前要添加jQuery。
默認(rèn)情況下無法訪問,是因?yàn)闆]有提前開設(shè)靜態(tài)文件資源的訪問接口,如圖所示
login能請求成功,是瀏覽器朝這個(gè)網(wǎng)址http://127.0.0.1:8000/login/,這個(gè)后端已經(jīng)開設(shè)了訪問端口。
請求URL:http://127.0.0.1:8000/static/bootstrap-3.4.1-dist/css/bootstrap.min.css 是在自己的瀏覽器朝這個(gè)網(wǎng)址請求資源,但是后端沒有開設(shè)端口,所以訪問不到資源
如何解決?
理論我們應(yīng)該在urls填寫相對應(yīng)的關(guān)系,但是靜態(tài)文件太多了,所以Django專門為靜態(tài)文件開設(shè)了一個(gè)static文件資源接口
二、靜態(tài)文件相關(guān)配置
1. 如何配置靜態(tài)文件配置?
首先在setting.py里面找到STATIC_URL = ‘/static/’,在下面配置static所在資源的路徑
相當(dāng)于把static路徑添加到環(huán)境變量中去,但是要注意把login.html中的…去掉
2.接口前綴
STATIC_URL = '/static/' # 訪問靜態(tài)文件資源的接口前綴(通行證)
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), # 存儲靜態(tài)文件資源的目錄名稱os.path.join(BASE_DIR, 'static1'), # 存儲靜態(tài)文件資源的目錄名稱os.path.join(BASE_DIR, 'static2'), # 存儲靜態(tài)文件資源的目錄名稱
]"""接口前綴正確之后 會拿著后面的路徑依次去到列表中自上而下查找 一旦找到就返回"""
查找順序
接口前綴>>>接口資源文件(自上而下,找到就截止),接口前綴對了才有資格訪問接口文件資源
要是想切換接口前綴呢?
有時(shí)候就瀏覽器會請求臨時(shí)緩存內(nèi)容發(fā)送我們,我們不可能一個(gè)一個(gè)去改static,太麻煩了,我們直接動態(tài)獲取
3. 接口前綴動態(tài)匹配
靜態(tài)文件配置
<link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
<script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
如果需要改接口前綴的話,需要把上面的靜態(tài)文件配置改為下面的模板語法(可動態(tài)獲取)
django提供的模板語法{% load static %},相對于模塊。
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
4. form表單
action 控制數(shù)據(jù)提交的地址1.action="" 數(shù)據(jù)默認(rèn)提交當(dāng)前頁面所在的地址2.action="https://www.baidu.com/" 完整網(wǎng)址3.action="/index" 朝當(dāng)前服務(wù)端的index地址提交method 控制數(shù)據(jù)提交的方法1.get 默認(rèn)2.post 可以改post method="post"form表單默認(rèn)get請求 , 朝瀏覽器發(fā)送請求會是敏感數(shù)據(jù),要換成post請求,mothed=post
請求方法補(bǔ)充
1.get請求 :朝服務(wù)端索要數(shù)據(jù),也可以攜帶一些額外的要求。
? 攜帶額外數(shù)據(jù)方式:URL?xxx=yyy&uuu=zzz,但是問號后面攜帶的數(shù)據(jù)大小是有限制的(2-8kb),并且不能攜帶敏感數(shù)據(jù)(密碼)
2.post請求: 朝服務(wù)端提交數(shù)據(jù)
? 攜帶額外數(shù)據(jù)的方式:請求體,請求體攜帶數(shù)據(jù)安全性較高并且沒有大小的限制。
? 前期發(fā)送post請求需要注釋掉配置文件中的某一行
method="post"
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]
form表單要注意的點(diǎn)
1.關(guān)于請求方法
2.獲取用戶標(biāo)簽要加name屬性,不加name屬性是填寫不了
3.修改settings里面的配置
三、request對象方法
理解
request={WSGIReques} <WSGIRequest: GET '/login/'>
兩層封裝,第一層wsi封裝了大字典,第二層是django封裝成了方法,返回給我們的是里面含有很多方法
request請求結(jié)果
請求方法 | 描述 | 結(jié)果 |
---|---|---|
request.method | 結(jié)果是純大寫的字符串?dāng)?shù)據(jù) | GET/POST |
request.POST | 獲取post請求體里面攜帶的數(shù)據(jù) | |
request.POST.get() | 獲取列表最后一個(gè)數(shù)值 | |
request.POST.getlist() | 獲取整個(gè)列表數(shù)據(jù) | |
request.GET | 獲取網(wǎng)址問號后面攜帶的數(shù)值 | |
request.GET.get() | 獲取列表最后的一個(gè)數(shù)值 | |
request.GET.getlist() | 獲取整個(gè)列表數(shù)據(jù) |
代碼展示
代碼展示
def login(request):"""如果get請求直接返回html頁面如果是post請求,那么需要獲取發(fā)送過來的數(shù)據(jù):param request::return:"""print(request.GET)if request.method=='GET':# 1.返回html頁面# print(request.method) # / GET/POSTreturn render(request,'login.html')elif request.method=='POST':#2.獲取post請求體里面的數(shù)據(jù)print(request.POST) # <QueryDict: {'kimi': ['kimi'], 'pwd': ['123']}>name=request.POST.get('name') # 獲取列表最后一個(gè)數(shù)據(jù)值pwd=request.POST.get('pwd')print(name,type(name),pwd,type(pwd)) # kimi <class 'str'> 123 <class 'str'>name1=request.POST.getlist('name')print(name1,type(name1)) # ['kimi'] <class 'list'>return HttpResponse('數(shù)據(jù)我收到了')
四、Django連接數(shù)據(jù)庫
pycharm連接MySql
1,pycharm初次連接數(shù)據(jù)庫,都要下載相應(yīng)的驅(qū)動,驅(qū)動不行就換驅(qū)動,驗(yàn)證的話就是登錄用戶名(端口和地址) 庫名,驗(yàn)證登錄就用test connection
三個(gè)位置查找數(shù)據(jù)庫相關(guān)1.右側(cè)上方database2.左下方database3.配置里面的plugins插件搜索安裝
注意: 都沒有再沒有卸載pycharm重新裝
2.登錄管理員賬戶和密碼,連接你需要的數(shù)據(jù)庫(庫要提前創(chuàng)建好),在連接之前可以先點(diǎn)擊Test Connection 測試連接是一次。注意:在公司不能是管理員的用戶登錄的!
3.成功連接成功
Django連接MySQL
django自帶的sqlite3是一個(gè)小型的數(shù)據(jù)庫,功能比較少,主要是用于本地測試。實(shí)際項(xiàng)目都會替換它的
1.修改配置文件中的數(shù)據(jù)庫設(shè)置成Django連接MySQL
django配置文件中默認(rèn)的是sqlite3數(shù)據(jù)庫
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}django連接MySQL要修改上述配置
1.第一配置文件中配置
DATABASES = {'default': {# 'ENGINE': 'django.db.backends.sqlite3', # 修改成MySQL數(shù)據(jù)庫# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # 連接數(shù)據(jù)庫名稱 先創(chuàng)建好才能指定'ENGINE': 'django.db.backends.mysql', # 修改成MySQL數(shù)據(jù)庫'NAME': 'djangodb1', # 連接數(shù)據(jù)庫名稱 先創(chuàng)建好才能指定'HOST': '127.0.0.1','PORT': 3306,'USER': 'root','PASSWORD': '123','CHARSET': 'utf8'}
}注意,左邊的名字都要大寫!!!!
2.手動改動將默認(rèn)mysqldb改為pymysql
django默認(rèn)用的是mysqldb模塊鏈接MySQL, 但是該模塊的兼容性不好 需要手動改為用pymysql鏈接,需要指定模塊
? 2.1 django1.X版本需要在項(xiàng)目目錄下或者app目錄下的__init__.py編寫代碼
import pymysql
pymysql.install_as_MySQLdb()
? 2.2 django2.X及以上都可以直接通過下載mysqlclient模塊解決
pip3.8 install mysqlclient
該模塊windows下載問題不大 主要是mac電腦可能有問題
五、Django ORM簡介
ORM:對象關(guān)系映射
? 優(yōu)點(diǎn):它能夠讓不會SQL語句的python程序員,使用python面向?qū)ο蟮恼Z法來操作數(shù)據(jù)庫。
? 缺點(diǎn):封裝程度太高,有時(shí)候sql語句的效率偏低,需要自己寫SQL語句。
類 表
對象 一條條數(shù)據(jù)
對象點(diǎn)名字 數(shù)據(jù)獲取字段對應(yīng)的值
基本ORM操作(數(shù)據(jù)的遷移)
1.在models.py中編寫模型類
class User(models.Model)# 字段名=字段類型+約束條件# id int primary_key auto_incrementid=models.AutoField(primary_key=True)# username varchar(32) # CharField必須要加max_length參數(shù),不加報(bào)錯name=models.CharField(max_length=32)# password intage=models.IntegerField()
2.執(zhí)行數(shù)據(jù)庫遷移項(xiàng)目
打開terminal輸入命令
# 數(shù)據(jù)庫遷移
python38 manage.py makemigrations 將操作記錄到小本本上(migrations)
# 數(shù)據(jù)庫同步到數(shù)據(jù)庫中
python38 manage.py migrate 將操作同步到數(shù)據(jù)庫上注意:每次在models.py修改了與數(shù)據(jù)庫相關(guān)的代碼,都需要在執(zhí)行上述命令
關(guān)于數(shù)據(jù)庫遷移失敗的原因
1.一個(gè)數(shù)據(jù)庫盡量只對應(yīng)一個(gè)django項(xiàng)目
2.多個(gè)Django使用一個(gè)數(shù)據(jù)庫,極易容易報(bào)錯
Django ORM字段增刪改查
name = models.CharField(max_length=64)
password1 = models.CharField(max_length=64, null=True) 直接在寫一個(gè)字段名就行,給它一個(gè)默認(rèn)值如果要刪除的話,直接刪掉那一行字段代碼就行增刪改查都需要執(zhí)行兩句話:
python38 manage.py makemigrations
python38 manage.py migrate