day 49

day 49 Django 基本原理

00.三大主流web框架

  1. django
    1. 大而全,自帶的組件和功能很是多
      1. 內部有檢測機制,在運行狀態下修改代碼,會自動重啓可能會報錯,最好修改事後手動重啓一次
    2. 缺點;寫小項目時可能會比較笨重
    3. a使用wsgiref(django默承認修改),b、c本身寫的
  2. flask
    1. 小而精,自帶的組件特別少,功能基本依靠第三方組件
    2. 缺點;受限於第三方模塊的影響
    3. 若是將第三方模塊加起來可以蓋過django
    4. a使用werkzeug,b本身寫,c使用janja2
  3. tornado
    1. 異步非阻塞,執行速度快,甚至能夠用來開發遊戲服務器
    2. a、b、c都是本身寫的

01.結構

  1. 三大組成html

    1. a;socket部份
    2. b;路由配置
    3. c;模版語法
  2. socket部份前端

    1. 後端接收到的web請求結構python

      請求首行
      b'GET /請求功能 HTTP/1.1\r\n
      請求頭
      Host: 127.0.0.1:8080\r\n
      Connection: keep-alive\r\n
      Cache-Control: max-age=0\r\n
      Upgrade-Insecure-Requests: 1\r\n
      User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36\r\n
      Sec-Fetch-User: ?1\r\n
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n
      Sec-Fetch-Site: none\r\n
      Sec-Fetch-Mode: navigate\r\n
      Accept-Encoding: gzip, deflate, br\r\n
      Accept-Language: zh-CN,zh;q=0.9\r\n
      Cookie: csrftoken=aOZSalMQkKGbzstfjcw3O9sDoegdywL8AD7PzhidAyx3tXShN7oQtxN1MMnS6GVX\r\n
      \r\n(******)
      請求體
    2. 接收到後對數據進行處理,獲得須要的數據如請求功能web

    3. 再根據功能分派不一樣的頁面返回給瀏覽器數據庫

  3. 路由配置;經過鍵值對或元組的形勢將路由和功能函數對應起來django

  4. 模版語法flask

    1. 用來處理後端數據與html頁面的交互後端

    2. jinja2(語法極其貼近後端python語法)可以在html頁面上來操做後端傳遞過來的數據瀏覽器

      <p>{{ userDic }}</p>
      <p>{{ userDic.username }}</p>
      <p>{{ userDic['age'] }}</p>
      <p>{{ userDic.get('hobby') }}</p>
      <p>{{ userDic.get('hobby').0 }}</p>
      <p>{{ userDic.get('hobby').1 }}</p>
      <p>{{ userDic.get('hobby').2 }}</p>
      
      {% for user_dic in user_list %}  <!--jinja2的for循環-->
        <tr>
            <td>{{ user_dic.id }}</td>
            <td>{{ user_dic.username }}</td>
            <td>{{ user_dic.password }}</td>
        </tr>
      {% endfor %}                                      <!--須要添加for循環終止-->
      
      <!--
      模版的渲染。動態添加的數據是在後端處理生成的一個完整的html的過程
      渲染是在後端完成的,與前端無關(如表格的生成等。。。。)
      -->
  5. django項目同名文件夾下服務器

    1. settings.py;配置文件,建立好的app須要再INSTALLED——APPS中添加方可生效
    2. wsgi.py;wsgiref文件
    3. urls.py;路由與視圖函數對應關係,本身寫的功能須要手動添加到這裏
  6. app文件夾下

    1. admin.py;django admin後臺管理
    2. apps.py;註冊app使用
    3. models.py;放全部數據庫相關的模型類
    4. views.py;處理業務邏輯的視圖函數
    5. migrations文件夾;全部數據庫相關的操做記錄
    6. test.py;提供給你用來測試的文件
  7. manage.py;django的入口文件

  8. templates文件夾

    用來存儲html頁面,終端建立任務須要手動添加改文件夾並在settings文件下書寫路徑

    TEMPLATES = [
                     {
                         'BACKEND': 'django.template.backends.django.DjangoTemplates',
                         'DIRS': [os.path.join(BASE_DIR, 'templates')]//添加路徑
                         ,
                         'APP_DIRS': True,

03.django 三板斧

from django.shortcuts import render,HttpResponse,redirect
  1. HttpResponse;返回字符串

    def index(request):
      return HttpResponse("一串字符串")
  2. render;返回html文件

    def login(requset):
      user_dic = {"username": "jason", "password": "123456"}
      return render(requset, "login.html", {'xxx':user_dic}) # 將dic傳入html
    # django的模版語法字典只支持對象.屬性的方式
  3. redirect;重定向

    def home(requset):
      return redirect("/login")  # 定向到本地login頁面
     return redirect("https://www.baidu.com")  # 定向到外部百度頁面
相關文章
相關標籤/搜索