日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django(一)预热

發布時間:2025/3/17 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django(一)预热 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WSGI

WSGI(Web Server Gateway Interface)web服務器網關接口。它是python下的一個標準,定義了web服務器和web應用或框架之間一種簡單而通用的接口。在python中,它的具體實現是wsgiref模塊。客戶端(瀏覽器)把http請求發送給web服務器,web服務器封裝請求,再把請求發送給web應用,web應用處理請求,通過web服務器,將響應返回給客戶端。

手動實現一個web框架

為了更好的理解web框架,我們來試著手動實現一個簡單的web框架。先寫基本的邏輯:

from wsgiref.simple_server import make_server # 引用類route = {} # 用來存儲url path 和函數的對應關系的路由def deco(name): # 裝飾器,自動添加視圖函數到路由def wrapper(func):route[name] = funcreturn wrapper@deco('/login') def login(request):with open('login.html', 'rb')as f:return [f.read()]@deco('/auth') def auth(request):# environ對象的QUERY_STRING鍵對應用戶提交的用戶名和密碼,我們將它提取出來。login_info = request.get('QUERY_STRING') # user=ayhan&pwd=123user, pwd = login_info.split('&')_, user = user.split('=')_, pwd = pwd.split('=')if user == 'ayhan' and pwd == '123':return [b'login ok!']else:return [b'user or password error']def application(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])# environ ; 由wsgiref封裝了請求信息的對象。# start_response響應頭:狀態碼 + 鍵值對# 最簡單的響應如下,直接返回一個bytes字符串# msg = '<h1>hello world</h1>'# return [msg.encode('utf-8')] # 注意,要加[]# 實際中應該根據用戶的請求,返回不同的響應path = environ.get('PATH_INFO')# 獲取請求路徑,通過它來判斷用戶訪問的路徑,來返回不同的頁面# if path == '/seb':# with open('seb.html','rb')as f:# data = f.read()# return [data]# elif path == '/tom':# pass# else:# return [b'404']# 不用if判斷,用路由來處理請求,調用對應的視圖函數if path in route: # 路由分發res = route[path](environ)return reselse:return [b'404']server = make_server("", 8080, application) # 實例化一個WSGI服務器對象(底層基于socket),監聽ip和端口 # 不寫默認本機ip; 重寫application方法 server.serve_forever() # 運行服務器,調用application

將上述代碼用包和模塊的方式組織起來,就是一個簡單的框架:

程序主邏輯 bin.py如下:

from wsgiref.simple_server import make_server # 引用類 from views import *def application(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])path = environ.get('PATH_INFO')if path in route: # 路由分發res = route[path](environ)return reselse:return [b'404']if __name__ == '__main__':server = make_server("", 8080, application)

視圖函數如下:

route = {} # 用來存儲url path 和函數的對應關系的路由def deco(name): # 裝飾器,自動添加視圖函數到路由def wrapper(func):route[name] = funcreturn wrapper@deco('/login') def login(request):with open('templates/login.html', 'rb')as f:return [f.read()]@deco('/auth') def auth(request):# environ對象的QUERY_STRING鍵對應用戶提交的用戶名和密碼,我們將它提取出來。login_info = request.get('QUERY_STRING') # user=ayhan&pwd=123user, pwd = login_info.split('&')_, user = user.split('=')_, pwd = pwd.split('=')if user == 'ayhan' and pwd == '123':return [b'login ok!']else:return [b'user or password error']

這樣,一個簡單的web框架就完成了,只需添加視圖函數和模板,就可以可擴展其功能。

初識Django

Django是用python開發的一個開源web框架。有了它,我們可以專注于編寫清晰、易維護的代碼。

1 創建項目

在終端輸入如下命令,可以創建一個項目:
django-admin startproject project_name,項目名可以自定義,這里我們創建一個名為myweb的項目,創建完成后,可以看到如下的目錄結構:

項目名根目錄下分別有manage.py和一個全局文件夾myweb:
- manage.py 命令行工具,用來與Django進行交互
- __init__.py python包文件
- settings.py 配置文件
- urls.py 路由分發,定義了url訪問路徑與視圖函數的映射關系
- wsgi.py 網關文件,部署服務器用
Django內建了一個輕量級web服務器,僅供開發使用。它同一時間只能處理一次請求,且沒有安全審計。因此在生成環境中,還是要部署Apache或Nginx這類專業的web服務器。
現在我們在終端通過命令來啟動這個開發服務器:
python manage.py runserver [ip] [port]
如果不指定ip和端口,默認運行在本機的8000端口。通過瀏覽器訪問http://127.0.0.1:8000/時,將看到一個默認頁面。那是因為我們還沒有創建任何應用并設置路由。下面我們就為這個項目創建一個應用。

2 創建應用

切換到到項目的根目錄下,輸入如下命令:
python manage.py startapp app_name
這里,我創建一個名為blog的應用。項目根目錄下將生成一個以blog命名的新目錄。我們在該目錄下手動新建一個templates文件夾,用來存放html模板。

打開全局文件夾myweb下的setting.py,將新創建的blog應用添加到INSTALLED_APPS中。Django在尋找應用模板,及執行數據庫遷移等操作,都要以這步為前提:

3 定義視圖函數

views.py中的定義的函數是實現應用的具體業務邏輯,這些函數統稱為視圖函數。現在我們來定義一個視圖函數,用它來返回首頁內容。并在template文件夾下建立一個index.html文件,編輯內容<h1>Welcome to index page!</h1>。

from django.shortcuts import renderdef index(request):"""該視圖函數用來返回首頁的內容:param request: 請求對象:return: 返回由render函數渲染的html模板并返回的http響應"""return render(request, 'index.html')

4 url映射

我們知道用戶通過url訪問網站,不同的url應該調用不同的視圖函數,這樣才能正確處理用戶的請求,并返回響應內容。現在我們為剛剛定義的index視圖函數添加url映射關系。
修改myweb文件夾下的urls.py文件,添加url與映射。

from django.conf.urls import url from django.contrib import admin from blog import views as blog_views # 從blog應用中導入視圖函數urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^index/$', blog_views.index),# 添加映射,當用戶的url路徑是index/時,調用blog應用中的index視圖函數 ]

這里簡單說下一個url的構成:

5 啟動服務

python manage.py runserver [ip] [port] 比如:python manage.py runserver 192.168.16.2:8000 。注意訪問時可能會提示DisallowedHost,解決方案:編輯項目settings.py 中的ALLOWED_HOSTS = ['*']即可。
我們在創建項目時已經啟動了服務,Django會檢測代碼更改并自動重啟服務。如果有必要,可以ctl + c退出,然后重啟服務。現在我們試著訪問http://127.0.0.1/index,將看到首頁:

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的Django(一)预热的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。