Django框架简介
?Django框架簡介
MVC框架和MTV框架
MVC,全名是Model View Controller,是軟件工程中的一種軟件架構模式,把軟件系統(tǒng)分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等優(yōu)點。
想要更詳細的了解MVC模式? >>?點我
Django框架的設計模式借鑒了MVC框架的思想,也是分成三部分,來降低各個部分之間的耦合性。
Django框架的不同之處在于它拆分的三部分為:Model(模型)、Template(模板)和View(視圖),也就是MTV框架。
Django的MTV模式
? ? ? ?Model(模型):負責業(yè)務對象與數(shù)據(jù)庫的對象(ORM)
? ? ? ?Template(模版):負責如何把頁面展示給用戶
? ? ? ?View(視圖):負責業(yè)務邏輯,并在適當?shù)臅r候調用Model和Template
此外,Django還有一個urls分發(fā)器,它的作用是將一個個URL的頁面請求分發(fā)給不同的view處理,view再調用相應的Model和Template
Django框架圖示
?
?
Django安裝和基本使用
安裝Django,指定國內pip源
pip3 install django==1.11.18 -i https://pypi.douban.com/simple/Django官網(wǎng)下載頁面
?
創(chuàng)建Django項目
下面的命令創(chuàng)建了一個名為"webapp"的Django 項目:
django-admin startproject webapp?
項目創(chuàng)建完成,會在當前目錄下生成一個目錄
webapp/ ├── manage.py # 管理文件 └── mysite # 項目目錄├── __init__.py├── settings.py # 配置├── urls.py # 路由 --> URL和函數(shù)的對應關系└── wsgi.py # runserver命令就使用wsgiref模塊做簡單的web server?
運行Django項目:
默認是8000端口
[root@yunwei-test webapp]# python3 manage.py runserver 0.0.0.0:9999?
pycharm創(chuàng)建Django項目
pycharm會自動創(chuàng)建模板目錄
?
啟動項目
?
?
Django settings
# 項目根目錄 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# ip地址訪問權限 ALLOWED_HOSTS = ['*'] # app注冊列表 INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles', ]# 中間件 MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware', ]# 模板文件(HTML文件) TEMPLATES [{'DIRS': [os.path.join(BASE_DIR, 'templates')] # HTML文件路徑,pycharm會自動創(chuàng)建和添加。 命令行創(chuàng)建項目需要自己添加 }]# 數(shù)據(jù)庫配置 DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', # 數(shù)據(jù)庫類型'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # 要連接的庫} }# 靜態(tài)文件別名,以/static/開頭 STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR,'static') # 實際的靜態(tài)文件目錄路徑 ] django配置文件?
Django創(chuàng)建 app
一個Django項目可以分為很多個APP,用來隔離不同功能模塊的代碼。
python manage.py startapp app01?
執(zhí)行命令后,項目目錄下多出一個app01的文件夾,目錄結構如下:
[root@yunwei-test webapp]# tree app01/ app01/ ├── admin.py # admin管理后臺 ├── apps.py # app ├── __init__.py ├── migrations # 數(shù)據(jù)庫遷移的文件 │?? └── __init__.py ├── models.py # ORM ├── tests.py └── views.py # 函數(shù)功能?
?在settings配置文件中注冊app
# 在app列表中添加上INSTALLED_APPS = ['app01.apps.App01Config' ]
?
?
?
Django函數(shù)
from django.shortcuts import HttpResponse, render, redirect?
參數(shù)
必須接受一個參數(shù) request
所有和瀏覽器請求相關的都在 request 中 request.method GET POST(大寫) # 獲取請求方式request.POST.get('input中的name屬性值') # 獲取form表單提交的數(shù)據(jù),字符串類型(form表單使用POST提交時)
request.GET # url地址上攜帶的參數(shù) 例如:http://127.0.0.1/login/?user=xxx&pwd=xxx 獲取到的數(shù)據(jù): <QueryDict: {'user': ['xxx'], 'pwd': ['xxx']}>
request.path_info # url路徑
返回值
必須是一個HttpResponse對象
?
HttpResponse
內部傳入一個字符串參數(shù),返回給瀏覽器。
例如:
def index(request):# 業(yè)務邏輯代碼return HttpResponse("OK")?
render
除request參數(shù)外還接受一個待渲染的模板文件和一個保存具體數(shù)據(jù)的字典參數(shù)。
將數(shù)據(jù)填充進模板文件,最后把結果返回給瀏覽器。(類似于我們上面用到的jinja2)
例如:
def index(request):# 業(yè)務邏輯代碼return render(request, "index.html", {"name": "alex", "hobby": ["燙頭", "泡吧"]})?
redirect重定向
接受一個URL參數(shù),表示跳轉到指定的URL。
例如:
def index(request):# 業(yè)務邏輯代碼return redirect("/home/")?
重定向
return redirect('/home/') ?返回瀏覽器狀態(tài)碼:302? ?和響應頭:Location:?/home/ 瀏覽器會再次向返回的URL地址發(fā)起一次GET請求,獲取跳轉后的頁面。?
?
轉載于:https://www.cnblogs.com/root0/p/10751020.html
總結
以上是生活随笔為你收集整理的Django框架简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Percona XtraBackup 关
- 下一篇: Go 定时器内部实现原理剖析