測試開發進階(二十)
- 2019 年 10 月 7 日
- 筆記
Django基礎
1.為什麼要使用框架來開發
- 站在巨人的肩膀上
- 提升開發效率
- 只關注業務邏輯的實現,不關心底層建設
2.Django vs Flask
- Django
- 大而全
- 入門簡單
- 最流行
- 類似於精裝修的房子
- Flaks
- 輕量級
- 定製化程度高
- 流行
- 高手的玩偶
- 類似於毛坯房
3.Django是什麼
Django makes it easier to build better Web apps more quickly and with less code.
4.特點
- 提供創建項目工程自動化工具
- 數據庫ORM支持
- 模版
- 表單
- Admin管理站點
- 文件管理
- 認證權限
- session機制
- 緩存
創建工程
命令行創建
- 安裝Django
$ pip install Django
- 創建項目
$ django-admin startproject 項目名
- 運行項目
$ python manage.py runserver $ python manage.py runserver ip:端口
使用Pycharm創建項目
注意:使用Pycharm專業版

啟動



國際化
修改 settings.py
中的
LANGUAGE_CODE
為zh-hans
TIME_ZONE
為Asia/Shanghai
頁面展示的內容就會變成中文

創建子應用
- 業務功能模塊復用
- 將工程項目拆分為不同的子功能模塊,以子應用的形式存在
- 各功能模塊間可以保持相對的獨立
- 可以將該模塊代碼整體複製過去
創建
$ python manage.pt startapp 子應用


註冊
在全局配置文件 settings.py
中 INSTALLED_APPS
添加 'projects.apps.ProjectsConfig'
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 註冊子應用 # 子應用名.apps.子應用名首字母大寫Config 'projects.apps.ProjectsConfig', ]
子應用創建一個視圖
# projects/views.py from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): return HttpResponse('<h1>「測試遊記」</h1>')
# LearnDjango/urls.py from django.contrib import admin from django.urls import path from projects.views import index urlpatterns = [ path('admin/', admin.site.urls), path('index/', index), ]
刷新頁面後可以發現首頁消失

根據提示訪問:http://127.0.0.1:8000/index/

LearnDjango/urls.py
:
全局路由配置
- urlpatterns為固定名稱的列表
- 列表中的一個元素,就代表一條路由
- 從上到下進行匹配,如果能匹配上,Django會導入和調用path函數第二個參數指定的視圖(或子路由)
- 如果匹配不上會自動拋出404異常
- 5.
使用子路由
# projects/urls.py # -*- coding:utf-8 -*- """ @Describe: urls @Author: zhongxin @Time: 2019-09-24 07:42 @Email: [email protected] """ from django.urls import path from .views import index urlpatterns = [ path('', index), ]
# LearnDjango/urls.py from django.contrib import admin from django.urls import path from django.urls import include urlpatterns = [ path('admin/', admin.site.urls), path('index/', include('projects.urls')) ]
每個應用(模塊)都會維護一個子路由(當前應用的路由消息) 跟主路由一樣,也是由上到下進行匹配 能匹配上,則執行path第二個參數指定的視圖,匹配不上拋出404異常
視圖
函數視圖
def index(request): return HttpResponse('<h1>「測試遊記」</h1>')
上面就是一個 函數視圖
視圖函數第一個參數 request
是HttpRequest對象,包含前端用戶的所有請求信息
必須返回一個HttpResponse對象或者子對象
def index(request): if request.method == 'GET': return HttpResponse('<h1>「測試遊記」GET請求</h1>') elif request.method == 'POST': return HttpResponse('<h1>「測試遊記」POST請求</h1>') else: return HttpResponse('<h1>「測試遊記」其他請求</h1>')
使用 postman
進行測試



類視圖
# projects/views.py from django.views import View class IndexView(View): """ index 主頁類視圖 """ def get(self, request): return HttpResponse('<h1>「測試遊記」類視圖GET請求</h1>') def post(self, request): return HttpResponse('<h1>「測試遊記」類視圖POST請求</h1>')
# projects/urls.py from django.urls import path from projects import views urlpatterns = [ path('', views.IndexView.as_view()), ]



可以看到其他請求返回了 405
模版
新建 templates/demo.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>「測試遊記」</title> </head> <body> <h1>「測試遊記」模版</h1> </body> </html>
修改視圖 returnrender(request,'demo.html')
class IndexView(View): """ index 主頁類視圖 """ def get(self, request): return render(request,'demo.html') def post(self, request): return HttpResponse('<h1>「測試遊記」類視圖POST請求</h1>')
查看頁面

MVT
M:模型(Model) 與MVC中的M功能相同,負責和數據庫交互,進行數據處理
V:視圖(View) 與MVC中的C功能相同,接收請求,進行業務處理,返迴響應
T:模版(Template)與MVC中的V功能相同,負責構造要返回的html頁面
數據庫
<——–> M模型
<–請求/返回數據–> V視圖
<–請求/返回模版內容–> T模版
<–展示–> 客戶端