Django框架-01HTTP協議+Django簡介

HTTP協議

超文本傳輸協議

  • 規定了客戶端與服務端消息傳輸的格式

四大特性

  • 1.基於TCP/IP協議做用於應用層的協議
  • 2.基於請求響應
  • 3.無狀態
  • 4.無鏈接

數據格式之請求

  • 請求首行
  • 請求頭(一堆k,v鍵值對)
  • \r\n\r\n
  • 請求體(post請求攜帶的數據)

數據格式之響應:

  • 響應首行
  • 響應頭(一堆k,v鍵值對)
  • \r\n\r\n
  • 響應體(post請求攜帶的數據)

響應狀態碼

  • 1XX 服務器已經成功接受到你的數據正在處理,你能夠繼續提交其餘數據
  • 2XX 請求成功 服務器已經將你請求的數據發送給你了(200請求訪問成功)
  • 3XX 重定向(301, 302)
  • 4XX 請求資源不存在(403權限不夠,404無訪問資源)
  • 5XX 服務器錯誤(500服務器錯誤)

動靜態網頁

靜態網頁:

頁面上的數據都是寫死的,萬年不變

動態網頁:

頁面上的數據是從後端動態獲取的
    好比後端獲取當前時間
    後端獲取數據庫數據而後傳遞給前端頁面

模版渲染

什麼是模版渲染

  • 後端生成的數據直接傳遞給前端頁面使用(而且前端頁面能夠靈活的操做改數據) >>> 模板語法

jinjia2

  • 支持前端直接使用相似於python的語法操做數據
  • {{ user_dic }}html

    {{ user_dic.name }}前端

    {{ user_dic['password'] }}python

    {{ user_dic.get('name') }}web

  • {% for user in user_dict %}

    {{ user.id }}
    {{ user.name }}
    {{ user.password }}

    {% endfor %}

python三大主流web框架

Django:大而全,自帶了不少功能模塊,相似於航空母艦 (缺點:有點笨重)數據庫

Flask:短小精悍,自帶的功能模塊特別少,大部分都是依賴於第三方模塊(小而輕)django

Tornado:異步非阻塞 主要用在處理高io 多路複用的狀況 能夠寫遊戲後端後端

三者區別

  • a:socket
  • b:路由與視圖函數
  • c:模板渲染

Django:
a用的別人的 wsgiref
b本身寫的
c本身寫的
Flask:
a用的別人的 werkzeug
b本身寫的
c用的別人的 jinja2
Tornado:
a,b,c都是本身寫的瀏覽器

django項目注意點

  1. 計算機的名稱不能有中文
  2. 一個pycharm窗口就是一個項目,不要多個項目放在一個窗口裏面
  3. 項目名不能起中文

注意新建立的app須要在配置文件中註冊才能生效

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config'  # 能夠用全稱
    'app01'                  # 也能夠簡寫
]

建立django項目

命令行建立

  • 建立django項目緩存

  • django-admin startproject 項目名服務器

  • 建立app應用
    python3 manage.py startapp app01

  • 啓動django項目
    python3 manage.py runserver

    ps:用命令行建立django默認不會自動建立templates文件夾

  • 須要你手動本身建立(注意改文件夾路徑是否被添加配置文件中)

pycharm建立

  • FILE >>> new project 選擇第二個django 須要注意名字不能有中文,選擇本地的解釋器,勾選後臺管理
  • 建立app(也能夠在建立django項目的時候在app地方輸入名字,那麼會自動建立)
  • pycharm命令行建立
  • python3 manage.py startapp app01
  • Tools下面run manage task功能欄
  • 啓動點小綠色箭頭
    強調:
    1.用django必定要保證只有一個在運行狀態 切記切記!!!!!!!
    2.必定記得清瀏覽器的緩存

各文件的做用

應用名

migrations  數據庫遷移記錄相關數據
admin.py    django後臺管理相關
models.py   模型表相關
views.py    視圖函數相關

項目名

settings.py  配置文件
urls.py     路由與視圖函數的映射關係

templates

項目用到的全部的html文件

manage.py

django入口文件

django三板斧

ps: 全部請求都會返回一個HttpResponse是對的! 本質 render, redirect源碼裏面返回的都是HttpResponse,

好比

render: HttpResponse(content, content_type, status)

redirect:

def redirect(to, *args, **kwargs):
    if kwargs.pop('permanent', False):
        redirect_class = HttpResponsePermanentRedirect
    else:
        redirect_class = HttpResponseRedirect
    return redirect_class(resolve_url(to, *args, **kwargs))

from django.shortcuts import render, HttpResponse, redirect

HttpResponse 返回HttpResponse對象

render 返回一個html頁面

  • 傳值給前端方式一:
    def reg(request):
    user_dict = {'name':'jason','password':'123'}
    return render(request,'reg.html',{'user_dict':user_dict})
  • 傳值給前端方式二:
    def reg(request):
    user_dict = {'name':'jason','password':'123'}
    return render(request,'reg.html',locals())
  • 本質依然是方式一來實現

redirect 重定向

相關文章
相關標籤/搜索