程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django 01

編輯:Python

目錄

今日內容詳細

軟件開發結構

純手撸web框架

借助於wsgiref模塊

動靜態網頁

jinja2模板

自定義簡易版本web框架請求流程圖

python三大主流web框架

注意事項

django基本操作

應用

主要文件介紹

命令行與pycharm創建區別

django小白必備三板斧


今日內容詳細

前端

數據庫

前端 後端 數據庫
# 後端學不好 工作不好找

軟件開發結構

cs架構
bs架構
# 本質bs也是cs

純手撸web框架

# HTTP協議
"""
網絡協議
HTTP協議 數據傳輸是明文
HTTPS協議 數據傳輸是密文
websocket協議 數據傳輸是密文
四大特性
1.基於請求響應
2.基於TCP、IP作用於應用層之上的協議
3.無狀態
4.短/無鏈接
數據格式
請求首行
請求頭
請求體
響應狀態碼
1XX
2XX 200
3XX
4XX 403 404
5XX 500
"""
# 如何做到後綴的不同返回不同的內容
# 拿到用戶輸入的後綴 做判斷
# 不足之處
1.代碼重復(服務端代碼所有人都要重復寫)
2.手動處理http格式的數據 並且只能拿到url後綴 其他數據獲取繁瑣(數據格式一樣處理的代碼其實也大致一樣 重復寫)
3.並發的問題

借助於wsgiref模塊

"""
urls.py 路由與視圖函數對應關系
views.py 視圖函數(後端業務邏輯)
templates文件夾 專門用來存儲html文件
"""
# 按照功能的不同拆分之後 後續添加功能只需要在urls.py書寫對應關系然後取views.py書寫業務邏輯即可

動靜態網頁

"""
靜態網頁
頁面上的數據是直接寫死的 萬年不變
動態網頁
數據是實時獲取的
eg:
1.後端獲取當前時間展示到html頁面上
2.數據是從數據庫中獲取的展示到html頁面上
"""
# 動態網頁制作
import datetime
def get_time(env):
current_time = datetime.datetime.now().strftime('%Y-%m-%d %X')
# 如何將後端獲取到的數據"傳遞"給html文件?
with open(r'templates/03 mytime.html','r',encoding='utf-8') as f:
data = f.read()
# data就是一堆字符串
data = data.replace('dwadasdsadsadasdas',current_time) # 在後端將html頁面處理好之後再返回給前端
return data
# 將一個字典傳遞給html文件 並且可以在文件上方便快捷的操作字典數據
from jinja2 import Template
def get_dict(env):
user_dic = {'username':'jason','age':18,'hobby':'read'}
with open(r'templates/04 get_dict.html','r',encoding='utf-8') as f:
data = f.read()
tmp = Template(data)
res = tmp.render(user=user_dic)
# 給get_dict.html傳遞了一個值 頁面上通過變量名user就能夠拿到user_dict
return res
# 後端獲取數據庫中數據展示到前端頁面

jinja2模板

pip3 install jinja2
"""模版語法是在後端起作用的"""
# 模版語法(非常貼近python語法)
{
{ user }}
{
{ user.get('username')}}
{
{ user.age }}
{
{ user['hobby'] }}
{% for user_dict in user_list %}
<tr>
<td>{
{ user_dict.id}}</td>
<td>{
{ user_dict.username}}</td>
<td>{
{ user_dict.password}}</td>
<td>{
{ user_dict.hobby}}</td>
</tr>
{% endfor%}

自定義簡易版本web框架請求流程圖

"""
wsgiref模塊
1.請求來的時候解析http格式的數據 封裝成大字典
2.響應走的時候給數據打包成符合http格式 再返回給浏覽器
"""

python三大主流web框架

"""
django
特點:大而全 自帶的功能特別特別特別的多 類似於航空母艦
不足之處:
有時候過於笨重
flask
特點:小而精 自帶的功能特別特別特別的少 類似於游騎兵
第三方的模塊特別特別特別的多,如果將flask第三方的模塊加起來完全可以蓋過django
並且也越來越像django
不足之處:
比較依賴於第三方的開發者
tornado
特點:異步非阻塞 支持高並發
牛逼到甚至可以開發游戲服務器
不足之處:
暫時你不會
"""
A:socket部分
B:路由與視圖函數對應關系(路由匹配)
C:模版語法
django
A用的是別人的 wsgiref模塊
B用的是自己的
C用的是自己的(沒有jinja2好用 但是也很方便)
flask
A用的是別人的 werkzeug(內部還是wsgiref模塊)
B自己寫的
C用的別人的(jinja2)
tornado
A,B,C都是自己寫的

注意事項

# 如何讓你的計算機能夠正常的啟動django項目
1.計算機的名稱不能有中文
2.一個pycharm窗口只開一個項目
3.項目裡面所有的文件也盡量不要出現中文
4.python解釋器盡量使用3.4~3.6之間的版本
(如果你的項目報錯 你點擊最後一個報錯信息
去源碼中把逗號刪掉)
# django版本問題
1.X 2.X 3.X(直接忽略)
1.X和2.X本身差距也不大 我們講解主要以1.X為例 會講解2.X區別
公司之前用的1.8 滿滿過渡到了1.11版本 有一些項目用的2.0
# django安裝
pip3 install django==1.11.11
如果已經安裝了其他版本 無需自己卸載
直接重新裝 會自動卸載安裝新的
如果報錯 看看是不是timeout 如果是 那麼只是網速波動
重新安裝即可
驗證是否安裝成功的方式1
終端輸入django-admin看看有沒有反應

django基本操作

# 命令行操作
# 1.創建django項目
"""
你可以先切換到對應的D盤 然後再創建
"""
django-admin startproject mysite
mysite文件夾
manage.py
mysite文件夾
__init__.py
settings.py
urls.py
wsgi.py
# 2.啟動django項目
"""
一定要先切換到項目目錄下
cd /mysite
"""
python3 manage.py runserver
# http://127.0.0.1:8000/
# 3.創建應用
"""
Next, start your first app by running python manage.py startapp [app_label].
"""
python manage.py startapp app01
應用名應該做到見名知意
user
order
web
...
但是我們教學統一就用app01/02/03/04
有很多文件
# pycharm操作
# 1 new project 選擇左側第二個django即可
# 2 啟動
1.還是用命令行啟動
2.點擊綠色小箭頭即可
# 3 創建應用
1.pycharm提供的終端直接輸入完整命令
2.pycharm
tools
run manage.py task提示(前期不要用 給我背完整命令)
# 4 修改端口號以及創建server
edit confi....

應用

"""
django是一款專門用來開發app的web框架
django框架就類似於是一所大學(空殼子)
app就類似於大學裡面各個學院(具體功能的app)
比如開發淘寶
訂單相關
用戶相關
投訴相關
創建不同的app對應不同的功能
選課系統
學生功能
老師功能
一個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', # 簡寫
]
# 創建出來的的應用第一步先去配置文件中注冊 其他的先不要給我干
ps:你在用pycharm創建項目的時候 pycharm可以幫你創建一個app並且自動注冊
***********************************************************************

主要文件介紹

-mysite項目文件夾
--mysite文件夾
---settings.py 配置文件
---urls.py 路由與視圖函數對應關系(路由層)
---wsgi.py wsgiref模塊(不考慮)
--manage.py django的入口文件
--db.sqlite3 django自帶的sqlite3數據庫(小型數據庫 功能不是很多還有bug)
--app01文件夾
---admin.py django後台管理
---apps.py 注冊使用
---migrations文件夾 數據庫遷移記錄
---models.py 數據庫相關的 模型類(orm)
---tests.py 測試文件
---views.py 視圖函數(視圖層)

命令行與pycharm創建區別

# 1 命令行創建不會自動有templatew文件夾 需要你自己手動創建而pycharm會自動幫你創建並且還會自動在配置文件中配置對應的路徑
# pycharm創建
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
]
# 命令行創建
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
]
"""
也就意味著你在用命令創建django項目的時候不單單需要創建templates文件夾還需要去配置文件中配置路徑
'DIRS': [os.path.join(BASE_DIR, 'templates')]
"""

django小白必備三板斧

"""
HttpResponse
返回字符串類型的數據
render
返回html文件的
redirect
重定向
return redirect('https://www.mzitu.com/')
return redirect('/home/')
"""


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved