<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      django框架

      django框架前導(dǎo)

      自己手寫(xiě)的原始版web框架(1.0)

      
      問(wèn)
          1.我們?cè)谧约壕帉?xiě)web框架之前需要先弄清楚web框架的作用
          2.我們編寫(xiě)web框架時(shí)要弄清楚需要實(shí)現(xiàn)什么樣的功能
      
      答
          1.web框架的作用就是連接前端與數(shù)據(jù)庫(kù),web框架可以被看成是連接兩者的中間介質(zhì),也可以簡(jiǎn)單的理解為socket服務(wù)端
          2.我們編寫(xiě)的web框架最基礎(chǔ)的功能就是實(shí)現(xiàn)瀏覽器訪(fǎng)問(wèn),且可以根據(jù)不同的網(wǎng)址后綴獲取不同的頁(yè)面內(nèi)容
          
      手寫(xiě)web框架思路
          1.先編寫(xiě)一個(gè)socket服務(wù)端
          2.瀏覽器此時(shí)直接訪(fǎng)問(wèn)是無(wú)效的,因?yàn)閔ttp協(xié)議的存在,所以我們需要在服務(wù)端中添加http協(xié)議
          3.瀏覽器直接訪(fǎng)問(wèn)成功,再進(jìn)一步,根據(jù)網(wǎng)址后綴的不同獲取不同的頁(yè)面
          4.在服務(wù)端想辦法獲取用戶(hù)輸入的網(wǎng)址后綴(一般是在請(qǐng)求首行中)
              GET /index HTTP/1.1
              Host: 127.0.0.1:8080
              Connection: keep-alive
              sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"
              sec-ch-ua-mobile: ?0
              sec-ch-ua-platform: "Windows"
              Upgrade-Insecure-Requests: 1
              User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
              Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
              Sec-Fetch-Site: none
              Sec-Fetch-Mode: navigate
              Sec-Fetch-User: ?1
              Sec-Fetch-Dest: document
              Accept-Encoding: gzip, deflate, br
              Accept-Language: zh-CN,zh;q=0.9
          5.對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行處理獲得網(wǎng)址后綴
        
      純手寫(xiě)的web框架可以實(shí)現(xiàn)最基本的功能,但是有幾個(gè)問(wèn)題
          1.socket代碼過(guò)于重復(fù)
          2.請(qǐng)求數(shù)據(jù)的處理過(guò)于繁瑣
          3.后綴匹配邏輯也比較繁瑣
      

      手?jǐn)]框架進(jìn)階(基于wsgiref模塊)(2.0)

      wsgiref模塊是一個(gè)內(nèi)置模塊,它是很多web框架底層使用的模塊
      它的作用就是
          1.封裝了socket代碼
          2.處理了請(qǐng)求數(shù)據(jù)
      
      那么針對(duì)1,0版本的手寫(xiě)web框架出現(xiàn)的問(wèn)題我們就可以很好的解決前兩個(gè)問(wèn)題
          1.啟動(dòng)服務(wù)端有固定的代碼
          2.相關(guān)的請(qǐng)求數(shù)據(jù)會(huì)被自動(dòng)處理成一個(gè)大字典request
          3.我們可以根據(jù)大字典的鍵值對(duì)來(lái)獲取不同的網(wǎng)址后綴名,從而返回不同的頁(yè)面內(nèi)容
          
      現(xiàn)在還剩下最后一個(gè)問(wèn)題:后綴匹配邏輯如何處理
      

      代碼封裝優(yōu)化

      可以根據(jù)我們之前寫(xiě)購(gòu)物車(chē)和選課系統(tǒng)的模式將后綴匹配成功后執(zhí)行的代碼封裝成不同的函數(shù),網(wǎng)址后綴名與函數(shù)做一個(gè)對(duì)應(yīng)關(guān)系
      1.網(wǎng)址后綴名與功能函數(shù)做對(duì)應(yīng)
      2.功能函數(shù)中存放具體的業(yè)務(wù)代碼
      3.功能函數(shù)和對(duì)應(yīng)關(guān)系放在不同的py文件中
          views.py        存放核心業(yè)務(wù)邏輯(功能函數(shù))
          urls.py         存放網(wǎng)址后綴與函數(shù)名的對(duì)應(yīng)關(guān)系
          templates       存放html頁(yè)面文件
      4.可以將request大字典順手傳給功能函數(shù),讓業(yè)務(wù)邏輯有更多的數(shù)據(jù)可用
      

      動(dòng)靜態(tài)網(wǎng)頁(yè)

      動(dòng)態(tài)網(wǎng)頁(yè)就是頁(yè)面數(shù)據(jù)來(lái)源于后端,后端給什么它就顯示什么
      靜態(tài)網(wǎng)頁(yè)則是頁(yè)面數(shù)據(jù)直接寫(xiě)死要想改變只能在源文件中修改
      

      jinja2模塊

      可以在html頁(yè)面上通過(guò)類(lèi)似于后端的操作方式來(lái)操作數(shù)據(jù)
      pip3 install jinja2
      
      
      from jinja2 import Template
      
      
      def get_dict_func(request):
          user_dict = {'name': 'jason', 'age': 18, 'person_list': ['阿珍', '阿強(qiáng)', '阿香', '阿紅']}
          with open(r'templates/get_dict_page.html', 'r', encoding='utf8') as f:
              data = f.read()
          temp_obj = Template(data)  # 將頁(yè)面數(shù)據(jù)交給模板處理
          res = temp_obj.render({'d1': user_dict})  # 給頁(yè)面?zhèn)髁艘粋€(gè) 變量名是d1值是字典數(shù)據(jù)的數(shù)據(jù)
          return res
      
      <p>{{ d1 }}</p>
      <p>{{ d1.name }}</p>
      <p>{{ d1['age'] }}</p>
      <p>{{ d1.get('person_list') }}</p>
      

      python主流web框架

      1.django
          自身攜帶的功能組件非常多
      2.flask
          自身攜帶的功能組件很少,但是它可以使用第三方模塊
      3.tornado
          異步非阻塞,速度極快效率極高
      

      django基本使用

      1.下載
          cmd下載
              pip38 install django 下載源      默認(rèn)下載最新版
              pip38 install django==2.2.22 下載源     指定下載版本
          pycharm中下載
              File==>Settings==>Project:  ==>Python Interpreter  雙擊右邊空白處搜索框中直接搜索即可,在這里可看見(jiàn)版本號(hào)
      2.驗(yàn)證
          django-admin    有反應(yīng)說(shuō)明下載成功,或者去pycharm中查看
      3.創(chuàng)建django項(xiàng)目
          django-admin startproject 項(xiàng)目名
      4.啟動(dòng)django項(xiàng)目
          cd 項(xiàng)目名  # 進(jìn)入項(xiàng)目目錄
          python38 manage.py runserver 127.0.0.1:8080
          注意:
              這里啟動(dòng)django是可能會(huì)報(bào)錯(cuò):[WinError 10013] 以一種訪(fǎng)問(wèn)權(quán)限不允許的方式做了一個(gè)訪(fǎng)問(wèn)套接字的嘗試。
              這是由于端口沖突導(dǎo)致的,換一個(gè)端口號(hào)就好了
      5.pycharm創(chuàng)建django項(xiàng)目時(shí)會(huì)自動(dòng)創(chuàng)建templates文件夾,但是配置文件中需要修改文件路徑
          cmd創(chuàng)建的django項(xiàng)目沒(méi)有templates文件夾,需要自己手動(dòng)創(chuàng)建,而且吧配置文件需要自己配置一個(gè)路徑
      

      django app的概念

      app即application,django是一個(gè)大的整體,app則是下面的具體的功能模塊
      app創(chuàng)建
          命令行創(chuàng)建
              python38 manage.py startapp 應(yīng)用名
          pycharm創(chuàng)建
              新建django項(xiàng)目時(shí)可以默認(rèn)創(chuàng)建一個(gè),且自動(dòng)注冊(cè),自己手動(dòng)創(chuàng)建則是在Terminal中編寫(xiě)cmd命令創(chuàng)建
      無(wú)論是cmd命令行創(chuàng)建的還是pycharm中命令創(chuàng)建的都需要去settings.py中注冊(cè)
          INSTALLED_APPS = [
          	'app01.apps.App01Config',  # 完整寫(xiě)法
      		'app02'  # 簡(jiǎn)寫(xiě)
      	]
      

      django主要目錄結(jié)構(gòu)

      django項(xiàng)目目錄名
          manage.py                入口文件
          templates目錄            模板層(存儲(chǔ)html文件)
          db.sqlite3文件           django自帶的小型數(shù)據(jù)庫(kù)(項(xiàng)目啟動(dòng)之后才會(huì)出現(xiàn))
          django項(xiàng)目同名目錄
              settings.py          配置文件
              urls.py              路由層(存儲(chǔ)網(wǎng)址后綴與函數(shù)名對(duì)應(yīng)關(guān)系)
              wsgi.py              wsgiref網(wǎng)關(guān)文件
          應(yīng)用目錄
              migrations           存儲(chǔ)數(shù)據(jù)庫(kù)相關(guān)記錄
              admin.py             django內(nèi)置的admin后臺(tái)管理功能
              apps.py              注冊(cè)app相關(guān)
              models.py            模型層(與數(shù)據(jù)庫(kù)打交道的)
              tests.py             測(cè)試文件
              views.py             視圖層(存儲(chǔ)功能函數(shù))
              
      '''
      網(wǎng)址后綴    ==>   路由
      函數(shù)       ==>   視圖函數(shù)
      類(lèi)         ==>   視圖類(lèi)
      '''
      

      小白三板斧

      from django.shortcuts import render,HttpResponse,redirect
      
      HttpResponse      可以返回字符串類(lèi)型得數(shù)據(jù)
      render            返回html頁(yè)面并且支持傳值
      redirect          重定向
      
      posted on 2023-04-08 21:50  zyg111  閱讀(56)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 人人妻人人做人人爽夜欢视频| 久久精品国产久精国产| 久久精品国产再热青青青| 久久久www免费人成精品| 性XXXX视频播放免费直播| 国产精品无遮挡在线观看| 99在线精品视频观看免费| 国产午夜福利小视频在线| 国产在线精品欧美日韩电影| 国产女人高潮视频在线观看| 国产亚洲精品自在久久蜜TV | 国产精品老熟女乱一区二区| 国产精品无码专区| 国产在线一区二区在线视频| 欧洲精品色在线观看| 国产日产免费高清欧美一区| 色吊丝一区二区中文字幕| 无码精品国产va在线观看| 精品久久久久中文字幕日本 | 国产精品小粉嫩在线观看| 亚洲中文字幕一区二区| 五峰| 亚洲乱熟女一区二区三区| 99国产精品自在自在久久| 国产蜜臀av在线一区二区| 性色在线视频精品| 久国产精品韩国三级视频| 金坛市| 人妻av无码系列一区二区三区| 亚洲AV永久中文无码精品综合| 少妇仑乱a毛片无码| 亚洲日韩乱码中文无码蜜桃| 美女裸体视频永久免费| 国产精品高清一区二区三区| 澳门永久av免费网站| 免费人成网站免费看视频| 国产丰满乱子伦午夜福利| 成人午夜视频在线| 亚洲国产成人无码av在线播放| 亚洲中文字幕无码久久精品1| 波多结野衣一区二区三区|