Django
- 簡介:
- 使用框架開發(fā)
1.可以站在巨人的肩膀上
- 提高開發(fā)效率
- 只關注業(yè)務邏輯上的實現(xiàn)负敏,不關心底層建設
- 使用框架開發(fā)
- 常用的框架Django 和 Flask
- diango
- 大而全
- 入門簡單
- 最流行
- Flask
1.輕量級
- 定制化程度高
- 流行
- 適合于老手
diango的特點
- 提供創(chuàng)建項目的自動工具
- 數(shù)據(jù)庫ORM支持
- 模板
- 表單
- admin管理站點
- 文件管理
- 認證權限
- session 機制
- 緩存
創(chuàng)建工程
- 創(chuàng)建虛擬環(huán)境(詳情查看之前文章)
- python -m venv 虛擬環(huán)境名
- 安裝Django
-
進入虛擬環(huán)境
win:
- 安裝Django(網絡不好的可以用豆瓣源)
pip install Django
-
- 創(chuàng)建項目
- 命令行創(chuàng)建:
diango startproject 項目名
創(chuàng)建于項目配置同名需要下項目名后加一個 “ .”
diango startproject 項目名 . -
使用PyCjarm創(chuàng)建
- 運行項目
- python manage.py runserver
- python manage.py runserver ip:端口
目錄結構
setting : 項目全局配置文件
urls: 生命全局的URL路由表
wagi.py 兼容Wsgi的web服務器入口
manage.py 和sjango交互的命令行工具
-
修改項目主頁語言
創(chuàng)建子應用
- 定義
- 業(yè)務模塊做到復用
- 將工程項目拆分為不同的子功能模塊
- 以子應用的形式存在
-各功能模塊間可以相互的獨立
- 以子應用的形式存在
- 可以將該模塊整體復制
2.創(chuàng)建
- python manage.py startapp 子應用名
3.注冊
-
在全局配置文件setting中的INSTALLED_APPS添加子應用
4.創(chuàng)建視圖
-
在子應用名/views.py中代碼如下
5.添加路由
- 在project/urls.py子路由文件
-
全部路由urls中加載子路由信息
6.子應用結構
migrations 用于數(shù)據(jù)庫遷移歷史記錄
admin 網站后臺管理站點配置文件
apps 用于配置當前子應用的相關信息
models 保存數(shù)據(jù)庫模型類
test.py 編寫單元測試
views 用于編寫web視圖
路由
- 全局
from django.contrib import admin
from django.urls import path,include
#全局路由配置信息
# urlpatterns為固定名稱的列表
# 列表中的一個元素,就代表一條路由
# 從上到下進行匹配骂束,如果成功苛谷,django會導入和調用path函數(shù)第二個參數(shù)指定的視圖獲取去子路由中匹配
# 如果匹配不上會拋出一個404(默認404頁面辅鲸,狀態(tài)404)
urlpatterns = [
path('admin/', admin.site.urls),
path('index', include('Project.urls')),
]
- 子路由
from django.urls import path
from Project.views import index
#子路由配置信息
# urlpatterns為固定名稱的列表
# 列表中的一個元素,就代表一條路由
# 從上到下進行匹配
# 如果匹配不上會拋出一個404(默認404頁面腹殿,狀態(tài)404)
urlpatterns = [
path('', index),
]
視圖
- 函數(shù)視圖
from django.http import HttpResponse
from django.views import View
# Create your views here.
# 函數(shù)視圖
# 視圖函數(shù)第一個參數(shù)一般默認為request
def index(request):
'''
:param requext: # request是HTTprequest對象独悴,白喊前端的所有請求信息
:return: 必須返回一個HttpReponse對象或者子對象
'''
if request.method == 'GET':
return HttpResponse('<h1>星空<h1>')
elif request.method == "POST":
return HttpResponse('<h1>黑夜<h1>')
else:
return HttpResponse('<h1>星星<h1>')
路由設置
- 類視圖
#類視圖
class Indexview(View):
def get(self,request):
return HttpResponse('<h1>星空<h1>')
def post(self,request):
return HttpResponse('<h1>黑夜<h1>')
def delete(self,request):
return HttpResponse('<h1>星星<h1>')
路由設置:
模板
- templates
1.創(chuàng)建一個html郵件
2,在視圖中調用:
from django.shortcuts import render
from django.http import HttpResponse
from django.views import View
# Create your views here.
# 函數(shù)視圖
# 視圖函數(shù)第一個參數(shù)一般默認為request
def index(request):
'''
:param requext: # request是HTTprequest對象锣尉,白喊前端的所有請求信息
:return: 必須返回一個HttpReponse對象或者子對象
'''
if request.method == 'GET':
return HttpResponse('<h1>星空<h1>')
elif request.method == "POST":
return HttpResponse('<h1>黑夜<h1>')
else:
return HttpResponse('<h1>星星<h1>')
#類視圖
class Indexview(View):
def get(self,request):
# return HttpResponse('<h1>星空<h1>')
# 從數(shù)據(jù)庫中讀取數(shù)據(jù)
datas = [
{'project':'11',
'leader':'22'},
{'project': '33',
'leader': '44'},
]
#locals將數(shù)據(jù)傳入
return render(request,'test.html',locals())
def post(self,request):
return HttpResponse('<h1>黑夜<h1>')
def delete(self,request):
return HttpResponse('<h1>星星<h1>')
MVT模式
M : mode 負責和數(shù)據(jù)庫交互
V: View 接收請求
T: Templace 負責構造返回的HTML頁面