測試開發進階(二十)

  • 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機制
  • 緩存

創建工程

命令行創建

  1. 安裝Django
$ pip install Django
  1. 創建項目
$ django-admin startproject 項目名
  1. 運行項目
$ python manage.py runserver  $ python manage.py runserver ip:端口

使用Pycharm創建項目

注意:使用Pycharm專業版

啟動

國際化

修改 settings.py中的

  • LANGUAGE_CODEzh-hans
  • TIME_ZONEAsia/Shanghai

頁面展示的內容就會變成中文

創建子應用

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

創建

$ python manage.pt startapp 子應用

註冊

在全局配置文件 settings.pyINSTALLED_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

全局路由配置

  1. urlpatterns為固定名稱的列表
  2. 列表中的一個元素,就代表一條路由
  3. 從上到下進行匹配,如果能匹配上,Django會導入和調用path函數第二個參數指定的視圖(或子路由)
  4. 如果匹配不上會自動拋出404異常
  5. 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模版<–展示–> 客戶端