學習python,從入門到放棄(50)
學習python,從入門到放棄(50)
django必會三板斧
-
啟動django專案之後 如何新增更多的功能
如果要新增功能,就去urls.py和views.py
-
django自帶重啟功能
當識別到專案中程式碼有變化之後,隔段時間會自動重啟,但是有時候較慢。
-
與瀏覽器打交道的檢視函式都應該有返回值
常見的就是下列三個
-
HttpResponse
主要用於返回字串型別的資料
-
render
主要用於返回html檔案,並且支援模板語法
-
redirect
主要用於重定向,括號內可以寫其他網站的全稱,也可以自己網站的字尾。
-
登入功能
我們之所以可以在瀏覽器位址列中輸入不同的路由訪問到不同的資源,是因為我們在後端框架中提前開設了相應的訪問介面所以使用者才能訪問,言外之意就是我們沒有開設介面,那麼肯定訪問不到。
-
1.開設介面返回登入介面
-
2.登入介面需要使用bootstrap並且還需要自己編寫css和js
靜態檔案
-
3.頁面需要獲取前端使用者資料並且傳遞給後端
form表單
action引數:控制資料的提交地址
method引數:控制請求的提交方式 -
4.訪問登入頁面
靜態檔案全部顯示資源不存在
因為我們並沒有開設靜態資源訪問的介面
-
5.開設靜態資源的訪問介面
理論上應該自己去路由層開設介面資源,但是由於靜態檔案資源使用頻率很高,只要是一個web專案都肯定需要,所以django為了避免開發者繁瑣,提供了靜態資源的配置檔案,只需要填寫固定的配置即可開設資源介面。
settings.py# 靜態檔案資源訪問介面固定配置 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] # html頁面路徑 /static/mycss.css
-
6.配置檔案
STATIC_URL = '/static/'
的作用STATICFILES_DIRS = []
用來儲存多個元素的以該地址為例:/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
/static/是介面字首 表示具備訪問靜態檔案資源的許可權
具備了許可權之後會拿著介面字首後面的檔案路徑去列表中每個資料夾中查詢
bootstrap-3.3.7-dist/css/bootstrap.min.css
找到一個就結束
比如 static和static1裡面都有a.txt 那麼只會拿到static中的 -
7.介面字首動態繫結
如果templates中有很多html檔案並且都需要引入靜態資源,現在把介面字首修改了,那麼會造成頁面無法載入資源。
{% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
靜態檔案
編寫完成後不會經常被修改的與html頁面相關的檔案
css檔案、js檔案、圖片檔案、第三方框架檔案(bootstrap)
上述檔案都可以稱之為是'靜態檔案'
在django中靜態檔案單獨開設一個資料夾儲存 預設叫static資料夾
在該資料夾內還可以根據功能的不同繼續劃分不同的檔案
css資料夾 js檔案 img資料夾 others資料夾
request物件方法
提交post請求,預設會報403。
直接去配置檔案中註釋一行即可
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]
-
get請求和post請求都會觸發同一個檢視函式login的執行
如何針對不同的請求執行不同的程式碼?
get請求返回一個登入頁面
post請求獲取使用者資料並校驗 -
獲取當前請求方式
request.method 返回的是純大寫的請求方法字串
由於get請求更加常見,post請求次之,所以還可以按照下列方式簡寫
if request.method == 'POST': return HttpResponse('hello world') """預設讓檢視函式處理get請求""" return render(request, 'login.html')
-
獲取post請求提交的普通資料
request.POST 結果是一個QueryDict 可以看成字典處理
request.POST.get('username') request.POST.getlist('hobby')
get方法會拿到值列表中最後一個元素,而不是整個列表
getlist方法會直接拿到整個值列表 -
獲取url後面攜帶的資料
request.GET 結果是一個QueryDict 可以看成字典處理
request.GET.get('info') request.GET.getlist('cityList')
特徵與上述request.POST一致 使用場景也很多
pycharm連結MySQL
其實pycharm也可以充當很多資料庫軟體的客戶端
pycharm右上方側邊或者左下方邊角的 database。
settings
plugins
搜尋database下載apple即可
-
連結資料庫
1.選擇資料庫
2.首次連結需要下載驅動
download driver...
3.測試連結如果不通過 則需要換驅動重新下載使用
Driver:MySQL MySQL for 5.1
django連結MySQL
django預設自帶一個sqlite3資料庫,但是功能很少,僅用於本地測試。
-
預設配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
-
修改配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'jp_05', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': 'jason123', } }
-
指定模組
在專案同名的資料夾內的
__init__.py
或者應用名的資料夾內的__init__.py
新增一行固定的程式碼
import pymysql
pymysql.install_as_MySQLdb()
django orm
ORM即物件關係對映
能夠讓不會寫SQL的python程式設計師使用python語法就可以直接操作MySQL
好處:提升了開發效率
壞處:封裝了SQL語句,有時候可能效率不高,還需要人為編寫SQL調優。
-
基本使用
-
編寫類程式碼
class Users(models.Model): uid = models.AutoField(primary_key=True) # 等價於uid int primary key auto_increment name = models.CharField(max_length=32) # 等價於name varchar(32) pwd = models.IntegerField() # 等價於pwd int
-
執行資料庫遷移命令
python3 manage.py makemigrations # 記錄操作 python3 manage.py migrate # 將操作遷移到資料庫
首次執行遷移命令 django還會自動建立一些預設需要使用到的表
-
表名的特徵
Users app01_users
由於django支援多個應用,為了區分不同應用下可能會出現相同的表名,所以自動加上了應用的字首,因為同一個應用下不可能出現相同的表名(只要你是個正常的程式設計師都不會犯這樣的錯誤)
-
擴充套件
1.表的主鍵可以不寫,orm會自動幫你寫一個名為id的主鍵
2.每次修改了跟資料庫相關的python程式碼,都需要重新執行遷移命令。針對兩個遷移命令,可以採用pycharm提示功能編寫
tools run manage.py task
-
資料操作
-
增
user_obj = models.Users.objects.create(name='jack', pwd='333') print(user_obj) print(user_obj.uid) print(user_obj.name) print(user_obj.pwd)
-
查
res = models.Users.objects.filter(name='jason') print(res) # <QuerySet [<Users: Users object>]> print(res[0]) # Users object print(res[0].uid) # 1 print(res[0].name) # jason print(res[0].pwd) # 123
-
改
models.Users.objects.filter(uid=1).update(name='jasonNB')
-
刪
models.Users.objects.filter(uid=3).delete()