Django基礎內容介紹
阿新 • • 發佈:2022-03-01
內容回顧
-
純手擼web框架
藉助於scoket模組啟動服務端 針對http協議資料自己人為處理(切割)
-
藉助於wsgiref模組
內部封裝了socket以及針對http格式資料的處理
-
程式碼優化
1.先在一個py檔案中拆分程式碼 2.根據功能的不同拆分成了不同的py檔案和資料夾 """拆分完成後 以後需要擴充套件功能 只需要在urls.py和views.py修改即可"""
-
動靜態網頁
核心就在於網頁上資料的來源
-
jinja2模板語法
能夠支援後端將資料傳遞給html頁面並且在該頁面上使用類似於後端的語法來操作資料 {{ name }} {% for i in name_list %} {% endfor %}
-
python主流web框架
django flask tornado
-
Django下載與使用
pip3 install django==1.11.11 命令列操作 django-admin startproject mystite cd mysite python36 manage.py runserver ip:port python36 manage.py startapp app01 """ django專案與app之間的關係 django專案是空殼子 app才是真正的核心 相當於一個獨立的功能模組 eg:django相當於一所大學 app相當於二級學院 """ # django啟動報錯的各種問題 1.python直譯器問題 widgets.py多了個逗號 2.由於版本問題導致配置檔案配置項錯誤 [os.path.join(BASE_DIR,'templates')] 3.計算機名稱和py檔案等名稱儘量不要使用中文 # 命令列操作不會自動幫你建立templates資料夾並且也不會在檔案中配置
內容概要
-
django主要目錄結構
-
django小白必會三板斧
-
靜態檔案配置(登入功能)
-
requests物件方法
-
pycharm連結MySQL
-
django連結MySQL
內容詳細
django主要目錄結構
mysite資料夾 mysite同名資料夾 settings.py # django暴露給使用者可以自定義配置的檔案 urls.py # 存放路由(路徑)與函式(檢視函式)對應關係 wsgi.py # 依賴於wsgiref模組的socket啟動部分 manage.py # django的入口(啟動)檔案 app01資料夾 migrations資料夾 # 裡面存放ORM針對資料庫相關的記錄 admin.py # django自帶的後臺管理功能 apps.py # 每個應用的獨立標識 models.py # 與資料庫打交道的檔案(ORM) tests.py # 自帶的測試檔案 views.py # 該app對應的主體功能(函式 類) db.sqlite3 # django自帶的小型資料庫(針對日期格式無法精準存取) """ 1.建立app之後一定要去settings.py中註冊 INSTALLED_APPS = [ 兩種寫法: # 全寫 'app01.apps.App01Config', # 簡寫 'app01' ] 2.templates路徑配置 TEMPLATES = [ { 'DIRS': [os.path.join(BASE_DIR, 'templates')] } ] """ django是可以自動重啟的 但是有時候自動重啟的反應時間有點長
django小白必會三板斧
1.HttpResponse
HttpResponse('hello django')
暫且理解為可以返回給前端瀏覽器文字類的資料
2.render
render(request,'index.html',{'n1':[1,2,3]}) # 精準傳(複雜但節省資源)
render(request,'index.html',locals()) # 範圍傳(簡單但浪費資源)
返回給前段瀏覽器html頁面 並且提供模板語法
3.redirect
重定向
redirect('https://www.baidu.com') # 可以寫全稱
redirect('/admin/') # 也可以只寫字尾(預設補齊當前IP和PORT)
urls.py 存放路由和檢視函式對應關係 路由層
views.py 存放試圖函式(核心業務邏輯) 檢視層
templates資料夾 存放html檔案 模板層
models.py 存放與資料庫相關的程式碼(ORM) 模型層
"""
1.django預設的埠號是8000
在同一臺機器同一時間如果需執行多個django專案 需要修改埠號
python3 manage.py runserver IP:PORT
pycharm自主修改
2.瀏覽器快取
settings
network
disable cache
"""
靜態檔案配置
# 利用django編寫使用者登入功能
'''為什麼前段請求不到後端的框架資源:我們沒有開設對應的資源介面'''
針對靜態資源的路徑開設無需在urls.py中指定 只需要在配置檔案指定即可
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
# 什麼事靜態檔案
不會頻繁修改的檔案
css檔案、js檔案、第三方框架檔案、圖片
# django儲存靜態檔案
static資料夾
該檔案內部還可以依據不同的功能劃分不同的區域
css資料夾
js資料夾
img資料夾
others資料夾
# 進階關係
STATIC_URL = '/static/' # 介面字首(要想訪問靜態資源 那麼路徑的字首就必須是這裡指定的)
# 將static資料夾所有的資源開設給外界
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'), # 資料夾名稱
os.path.join(BASE_DIR,'static1'), # 資料夾名稱
os.path.join(BASE_DIR,'static2') # 資料夾名稱
]
"""
介面字首正確之後 拿著後面的路徑去列表中
從上往下依次查詢對應的資源 找到了就不在繼續往下找
"""
# 介面字首動態匹配(寫在html檔案中)
{% 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>
網路請求方式
1.get請求
朝別人要資料
eg:瀏覽器位址列輸入www.baidu.com回車
get請求沒有請求體
但get請求可以攜帶一些額外的引數 但是大小有限制(2KB)
url?xxx=yyy&aaa=bbb
2.post請求
朝別人提交資料
eg:使用者註冊登入填寫完身份資料之後提交
post請求有請求體
post請求也可以攜帶資料 並且大小沒有限制 在請求體中
form表單重要引數
action # 控制資料提交的地址
1.寫全路徑 https://www.baidu.com
2.寫字尾(ip和埠號自動補全當前伺服器) /index/
3.不寫 提交給當前頁面所在的地址
method # 控制資料提交的方式
get form表單預設是get請求
post
"""
注意使用django前期在提交post請求之前需要去配置檔案中註釋掉一行程式碼
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]
"""
requests物件方法
request.method # 獲取請求方式名(純大寫的字串)
request.POST # 獲取post請求提交的普通資料
request.POST.get() # jason
request.POST.getlist()
request.GET # 獲取get請求url問號後面的資料
request.GET.get()
request.GET.getlist()
def login(request):
if request.method == 'POST':
username = request.POST.get('username') # 預設只會取列表最後一個元素
password = request.POST.get('password')
if username == 'jason' and password == '123':
return HttpResponse('OK')
else:
return HttpResponse('使用者名稱或密碼錯誤')
return render(request, 'login.html')
pycharm連結MySQL
database選項-new-Data Source-選擇資料庫
django連結MySQL(重點)
# 第一步配置
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME':'db8',
'USER':'root',
'PORT':3306,
'HOST':'127.0.0.1',
'PASSWORD':'123',
'CHARSET':'utf8'
}
}
# 第二部配置(3.6及以下直譯器 需要額外的配置)
import pymysql
pymysql.install_as_MySQLdb()
'''只要是__init__檔案即可 專案的 應用的都可以'''