Django項目搭建1

學習目標

知道MVT設計模式中MVT分別代表的含義
能夠使用命令創建Django工程和子應用
知道如何在Django中定義視圖及路由
理解Django路由的匹配流程
能夠區分命名參數和未命名參數的區別
知道如何使用request對象獲取查詢字符串參數
知道如何使用request對象獲取請求體數據

Django MVT

對項目進行分層的一種軟件設計模式;

核心思想:分層,解耦,分離了 數據處理 和 界面顯示 的代碼,使得一方代碼修改了不會影響到另外一方,提高程序的可擴展性和可維護性。

  • M全拼爲 Model,與MVC中的M功能相同,負責和數據庫交互,進行數據處理。
  • V全拼爲 View,與MVC中的C功能相同,接收請求,進行業務處理,返回應答。
  • T全拼爲 Template,與MVC中的V功能相同,負責封裝構造要返回的html。

項目搭建

  1. 項目和應用的創建 (兩種方式)

    • pycharm
    • 命令行
    django-admin startproject 項目名
    python manage.py startapp 應用名
    
  2. 運行服務器

    python manage.py runserver  				  # 使用默認ip和端口
    python manage.py runserver  127.0.0.1:8000    # 手動指定ip和端口
    
  3. 視圖初步使用

    • 定義視圖(函數)
    def index(request):
        return HttpResponse("hello django")
    
    • 在與全局的 url.py 中配置路由
      urlpatterns = [
          ...    
          # 配置路由和視圖: http://127.0.0.1:8000/users/index
          # 參數1: 匹配url的正則表達式
          # 參數2: 匹配成功後由Django框架調用的視圖函數
          url(r'^users/index$', views.index),
      ]
    
  4. 模板初步使用

    • 創建模板文件

    • 指定模板文件所在的目錄(pycharm創建的項目默認已經指定)

      # settings.py
      TEMPLATES = [
          {
              'BACKEND': 'django.template.backends.django.DjangoTemplates',
              
              # 指定模板文件所在的目錄
              'DIRS': [os.path.join(BASE_DIR, 'templates')],
               ...
          },
      ]
      
    • 在視圖中通過 render 函數使用模板

      def index(request):
          context = {'name': 'python'}
          return render(request, 'users/index.html', context)
      

配置

常用配置項

  • BASE_DIR 默認爲項目的根目錄 【理解,後面項目會用到】

  • DEBUG 是否開啓調試模式

    • 開發階段設置爲True, 會輸出項目調試信息;(開發模式,調試模式)
    • 項目上線後設置爲False,不會輸出項目調試信息;(生產模式,上線模式)
  • 語言和時區配置

    LANGUAGE_CODE = 'zh-hans'		# 指定爲中文
    TIME_ZONE = 'Asia/Shanghai'		# 指定時區
    
  • INSTALLED_APPS:什麼情況下需要註冊應用?【理解,如果提示TemplateDoesNotExist知道是什麼原因】

    • 要根據應用中的模型類生成表
    • 要用到應用中的模板
    class UsersConfig(AppConfig):
        name = 'users'
    
    INSTALLED_APPS = [
         ...    
        'users.apps.UsersConfig',		# 方式一
        # 'users'   					# 方式二  
    ]
    

靜態文件使用配置

靜態文件: css, js, images

配置:

  • STATIC_URL:訪問靜態文件時使用的url前綴, (使用默認值即可,不需要配置)
  • STATICFILES_DIRS:配置靜態文件保存在哪個目錄下(配置手動配置)
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_files')]
  • index.html模板中使用 圖片 或js靜態文件

    1537065618150

    注意:django測試服務器僅在調試模式下支持靜態文件的使用

URL配置

針對 http://127.0.0.1:8000/user/index 進行路由配置,習慣分開兩部分來配置

項目的 urls.py:

  urlpatterns = [
      ...
      url(r'^users/', include('users.urls')),
  ]

應用的 urls.py

  urlpatterns = [
  	  ...
      url(r'^index$', views.index), 
  ]

捕獲URL中的參數【重要】

http://127.0.0.1:8000/news/1/2

  • 未命名參數:按位置傳遞

    url(r'^news/(\d+)/(\d+)$', users.views.news),
     
    def news(request, a, b):
    	return HttpResponse("顯示新聞:%s %s" % (a, b))
    
  • 命名參數:按名字傳遞

    url(r'^news/(?P<category>\d+)/(?P<page>\d+)$', users.views.news),
    
    def news(request, category, page):
        return HttpResponse("顯示新聞:%s %s" % (category, page))
    

客戶端傳參的幾種方式

傳參方式 示例 如獲取參數 備註
url路徑(path) /news/1/2 正則
查詢字符串 /news2?category=1&page=2 request.GET QueryDict
請求體:表單類型的數據 category=1&page=2 request.POST QueryDict
請求體:非表單類型的數據(json, xml) {“category”:1,“page”:2} request.body bytes
請求頭 category=1 page=2 request.META 字典

QueryDict對象

類似字典,一鍵可以有多個值

get方法: 獲取值
getlist方法:獲取多個值,返回列表
request.GET,request.POST 都爲QueryDict類型的對象

request對象

request屬性 說明 備註
GET 獲取查詢字符串參數 (與請求方式無關) QueryDict
POST 獲取請求體中的表單類型的數據(與請求方式有關,僅限post請求) QueryDict
body 獲取請求體非表單類型的數據,比如:json bytes
META 獲取請求頭中的數據
(獲取自定義屬性時,需要 加前綴HTTP_, 轉大寫)
字典
user 當前訪問的登錄用戶對象

問題1:當請求方式爲 post ,是否可以通過 reqeust.GET 獲取查詢查詢字符串參數?

可以

問題2:當請求方式爲 put , 是否可以通過 request.POST 獲取到請求體中的表單數據?

不可以,需要用request.body獲取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章