Django基础知识MTV
Django簡介
Django是使用Python編寫的一個開源Web框架??梢杂盟鼇砜焖俅罱ㄒ粋€高性能的網(wǎng)站。
Django也是一個MVC框架。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式:
M 代表模型(Model),即數(shù)據(jù)存取層。 該層處理與數(shù)據(jù)相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及數(shù)據(jù)之間的關系等。
T 代表模板(Template),即表現(xiàn)層。 該層處理與表現(xiàn)相關的決定: 如何在頁面或其他類型文檔中進行顯示。
V 代表視圖(View),即業(yè)務邏輯層。 該層包含存取模型及調(diào)取恰當模板的相關邏輯。 你可以把它看作模型與模板之間的橋梁。
需要注意的是,不能簡單的把 Django 視圖認為是MVC控制器,把 Django 模板認為MVC視圖。
區(qū)別在于:
Django 視圖 不處理用戶輸入,而僅僅決定要展現(xiàn)哪些數(shù)據(jù)給用戶;
Django 模板 僅僅決定如何展現(xiàn)Django視圖指定的數(shù)據(jù)。
或者說, Django將MVC中的視圖進一步分解為 Django視圖 和 Django模板兩個部分,分別決定 “展現(xiàn)哪些數(shù)據(jù)” 和 “如何展現(xiàn)”,使得Django的模板可以根據(jù)需要隨時替換,而不僅僅限制于內(nèi)置的模板。
至于MVC控制器部分,由Django框架的URLconf來實現(xiàn)。URLconf設計非常巧妙,其機制是使用正則表達式匹配URL,然后調(diào)用合適的Python函數(shù)。雖然一開始有些不習慣,但是你很快就會喜歡上它,因為URLconf對于URL的規(guī)則沒有任何限制,你完全可以設計成任意的URL風格,不管是傳統(tǒng)的,RESTful的,或者是另類的。
Django基本命令
1、下載Django:
pip3 install diango2、創(chuàng)建一個django project
django-admin.py startproject mysite當前目錄下會生成mysite的工程,目錄結構如下:
manage.py ----- Django項目里面的工具,通過它可以調(diào)用django shell和數(shù)據(jù)庫等。
settings.py ---- 包含了項目的默認設置,包括數(shù)據(jù)庫信息,調(diào)試標志以及其他一些工作的變量。
urls.py ----- 負責把URL模式映射到應用程序。
wsgi.py------遵循WSGI規(guī)范,上線一般使用uwsgi+nginx
3、在mysite目錄下創(chuàng)建應用
python manage.py startapp blog migrations #數(shù)據(jù)庫修改表結構記錄 admin.py #Django提供的后臺管理 apps.py #當前app配置文件 models.py #Django中的ORM,寫指定的類 通過命令可以創(chuàng)建數(shù)據(jù)庫結構 tests.py #項目的單元測試 views.py #MTV中的視圖,用于寫業(yè)務邏輯4、啟動django項目
python manage.py runserver 8080這樣我們的django就啟動起來了!當我們訪問:http://127.0.0.1:8080/時就可以看到:
django常用命令
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' #創(chuàng)建django命令 django-admin.py startproject project-name #創(chuàng)建django的app python manage.py startapp app-name 或 django-admin.py startapp app-name #同步數(shù)據(jù)庫 python manage.py syncdb #注意:Django 1.7.1及以上的版本需要用以下命令 python manage.py makemigrations python manage.py migrate #命令行調(diào)試模式 python manage.py runserver 8001 python manage.py runserver 0.0.0.0:8000 #清除數(shù)據(jù)庫 python manage.py flush #創(chuàng)建超級管理員 python manage.py createsuperuser 按照提示輸入 #修改管理員密碼 python manage.py changepassword username(需要修改的用戶名) #導入和導出數(shù)據(jù) python manage.py dumpdata appname > appname.json python manage.py loaddata appname.json #進入數(shù)據(jù)庫 python manage.py dbshell在windows下推薦使用Pycharm創(chuàng)建Django項目
在Pycharm中創(chuàng)建Django項目的方法。
啟動Pycharm后,點擊file–>new project,出現(xiàn)下面的對話框。
選擇Django欄目,輸入項目名稱,按照慣例的mysite。選擇Python解釋器版本,點擊create創(chuàng)建。
Django將自動生成下面的目錄結構:
不用手動調(diào)用diango-admin命令。同樣的是,會自動創(chuàng)建與項目同名的目錄,包含了配置文件。templates目錄是Pycharm自動安裝,HTML文件存放處,也就是MTV中的T的目錄。manage.py則一樣是Django項目管理文件。
啟動django項目
在pycharm中啟動服務器也不需要輸入命令,如下圖:
在Pycharm的上部工具欄中找到下面圖示的圖標。
點擊edit configurations
在host中填入127.0.0.1,port中填入8000。
OK確定之后,點擊綠色的三角,web服務就運行起來了。
按圖所示,自動跳轉到瀏覽器程序界面,如果看到下面的界面,程序可以正常使用
如果想讓局域網(wǎng)內(nèi)其他機器通過IP訪問,則需要在全局設置setting中設置 ALLOWED_HOSTS = [‘192.168.1.101’],
簡單的django編寫
創(chuàng)建Django
一個project包含很多個Django app以及對它們的配置。技術上,project的作用是提供配置文件,比方說哪里定義數(shù)據(jù)庫連接信息, 安裝的app列表, TEMPLATE_DIRS ,等等。一個app是一套Django功能的集合,通常包括模型和視圖,按Python的包結構的方式存在。
創(chuàng)建app blog:
執(zhí)行命令后,在項目結構中,可見新增了目錄blog
編寫urls,views,models
編寫視圖blog/views.py 文件
views:作為MVC中的C,接收用戶的輸入,調(diào)用數(shù)據(jù)庫Model層和業(yè)務邏輯Model層,處理后將處理結果渲染到V層中去。
blog/views.py:
from django.http import HttpResponse # Create your views here. def index(request): return HttpResponse("Hello, world 你好")編寫urls
urls,程序的入口,支持正則匹配訪問url,將訪問url映射到views中的具體某個函數(shù)中。
為了能調(diào)用到上面這個views,我們需要將views.index函數(shù)映射到URL中。
在blog目錄沒有urls.py 文件,我們在blog目錄下創(chuàng)建一個urls.py 文件
blog/urls.py
from django.conf.urls import url from . import views urlpatterns = [url(r'^$', views.index, name='index'), ]將創(chuàng)建的urls.py 添加到全局urls.py中 mysite/urls.py
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' from django.conf.urls import include,url from django.contrib import adminurlpatterns = [#當用戶訪問http://127.0.0.1:8000,采用views下面的index函數(shù)處理,^表示開頭,$表示結尾url(r'^blog/', include('blog.urls')),#當用戶訪問http://127.0.0.1:8000/admin/時候使用admin.site.urls處理url(r'^admin/', admin.site.urls), ]通過訪問 http://127.0.0.1:8000/blog/ 可以調(diào)用到所編寫的views
通常我們都是將html文件返回給用戶。
寫這么一個index.html文件:
在templates目錄中 編寫一個index 文件
index 文件
修改一下blog/views.py文件
from django.shortcuts import render #render模塊是pycharm自動導入的 from django.http import HttpResponse # Create your views here. def index(request):#return HttpResponse("Hello, world 你好")return render(request,"index.html",)讓django知道我們的html文件在哪里,需要修改mysite/settings.py文件的相應內(nèi)容。默認情況下,無需修改。
重新啟動web服務。在瀏覽器刷新一下,你會看到帶有樣式的“hello world”。
靜態(tài)文件
在django中,一般將靜態(tài)文件放在static目錄中。接下來,在mysite中新建個static目錄。CSS,JS和各種插件都可以放置在這個目錄里。
讓django找到這個目錄,需要對mysite/settings進行配置
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/STATIC_URL = '/static/'STATICFILES_DIRS=[os.path.join(BASE_DIR,"static") ]在index.html文件中,可以引入js文件了:
View Code
重新啟動web服務,刷新瀏覽器,查看結果。
接收用戶發(fā)送的數(shù)據(jù)
web服務器和用戶之間沒有動態(tài)交互。
下面我們設計一個表單,讓用戶輸入用戶名和密碼,提交給index這個url,服務器將接收到這些數(shù)據(jù)。
先修改index.html文件
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><link href="/static/dist/css/bootstrap.css" rel="stylesheet"><style>*{margin-top: 10px;}</style></head><body><h1 style="...">用戶輸入</h1><form action="/index/" method="post"><input type="text" name="username"/> <input type="password" name="password"/> <input type="submit" value="提交"/></form></body> </html>然后修改blog/views.py文件
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def index(request):if request.method == "POST":username = request.POST.get("username",None)password = request.POST.get("password",None)print(username,password)return render(request,"index.html")重啟web服務時,會出錯,因為django有一個跨站請求保護機制,我們在settings文件中將它關閉。
瀏覽器,刷新頁面:
輸入點內(nèi)容提交 ,然后我們在pycharm中可以看到相應的數(shù)據(jù)。
收到了用戶的數(shù)據(jù),但返回給用戶的依然是個靜態(tài)頁面,通常我們會根據(jù)用戶的數(shù)據(jù),進行處理后在返回給用戶。
django采用自己的模板語言,根據(jù)提供的數(shù)據(jù),替換掉html中的相應部分
修改views.py文件:
數(shù)據(jù)庫
支持SQLite 3(默認)、PostgreSQL 、MySQL、Oracle數(shù)據(jù)庫的操作
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # 默認是SQLit 3 的配置DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),} }# MySQL的配置DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME':'dbname', #注意這里的數(shù)據(jù)庫應該以utf-8編碼'USER': 'xxx','PASSWORD': 'xxx','HOST': '','PORT': '',} }# 對于python3的使用者們還需要再加一步操作 # 由于Django內(nèi)部連接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,所以需要使用pymysql來代替# 如下設置放置的與project同名的配置的 __init__.py文件中import pymysql pymysql.install_as_MySQLdb()# PostgreSQL配置 DATABASES = {'default': {'NAME': 'app_data','ENGINE': 'django.db.backends.postgresql_psycopg2','USER': 'XXX','PASSWORD': 'XXX'}# Oracle配置 DATABASES = {'default': {'ENGINE': 'django.db.backends.oracle','NAME': 'xx','USER': 'xxx','PASSWORD': 'a_xxx','HOST': '','PORT': '',} }總結
以上是生活随笔為你收集整理的Django基础知识MTV的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django 知识补漏单例模式
- 下一篇: Django中自定义实现RESTful