###目錄:html
#1.簡介 ###MVCjava
###MVTpython
Django 是用Python開發的一個免費開源的Web框架,能夠用於快速搭建高性能,優雅的網站!linux
Django官方網站 Django官方文檔 安裝Django官方文檔介紹web
Django是一個基於MVC構造的框架。可是在Django中,控制器接受用戶輸入的部分由框架自行處理,因此 Django 裏更關注的是模型(Model)、模板(Template)和視圖(Views),稱爲 MTV模式。正則表達式
BSD:BSD許可證是隨着加州大學伯克利分校發佈BSD UNIX發展起來的,修改版本被Apple、Apache所採用。BSD協議是「寬容自由軟件許可證」中的一員,在軟件複用上給予了最小限度的限制。shell
BSD協議容許做者使用該協議下的資源,將其併入私人版本的軟件,該軟件可以使用閉源軟件協議發佈。數據庫
#2.環境搭建django
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-pip
複製代碼
對於Python開發用戶來說,PIP安裝軟件包是屢見不鮮。但國外的源下載速度實在太慢,浪費時間,並且好多軟件老是被牆,因此把PIP安裝源替換成國內鏡像,能夠大幅提高下載速度,還能夠解決被牆致使的裝不上庫的煩惱,提升安裝成功率。網上有不少可用的源,這裏推薦的是清華大學的pip源,它是官網pypi的鏡像,每隔5分鐘同步一次。
Linux下,修改 ~/.pip/pip.conf (沒有就建立一個),按下Ctrl + H 能夠看到隱藏文件,修改 index-url至tuna,內容以下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
複製代碼
4.利用pip安裝 Django(推薦使用1.11版本)
(sudo)pip install Django
或者 (sudo) pip install Django==1.8.16
或者 pip install Django==1.11
複製代碼
檢查是否安裝成功
>>> import django
>>> django.VERSION
(1, 11, 'final', 0)
>>>
>>> django.get_version()
'1.11'
複製代碼
#3.安裝pycharm
下載JDK
解壓 輸入命令:tar zvxf jdk-8u131-linux-x64.tar.gz
建立jvm文件 輸入命令:sudo mkdir /usr/lib/jvm
移動到/usr/lib/jvm下 輸入命令:sudo mv jdk1.8.0_131/ /usr/lib/jvm/
**注意:**若是沒有jvm文件,執行該語句雖然會自動建立jvm文件,但只會把jdk1.8.0_25裏面的文件都放到jvm中,而不是把jdk1.8.0_25及其裏面的文件放到jvm文件中,二者是有區別的
設置JDK環境變量 (也有在~/.bashrc修改的,區別是:/etc/profile的設置方法對全部登錄用戶都有效~/.bashrc只對當前用戶有效) 輸入命令:sudo vim ~/.profile
編輯:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
複製代碼
source ~/.profile
java -version
#4.Ubuntu下 正確安裝VMware Tools 爲了實現能夠從windows拖拽文件到ubuntu,能夠安裝VMware Tools。
#5.Django主要模塊
urls.py 網址入口,關聯到對應的views.py中的一個函數(或者generic類),訪問網址就對應一個函數。
views.py 處理用戶發出的請求,從urls.py中對應過來, 經過渲染templates中的網頁能夠將顯示內容,好比登錄後的用戶名,用戶請求的數據,輸出到網頁。
models.py 與數據庫操做相關,存入或讀取數據時用到這個,固然用不到數據庫的時候 你能夠不使用。
forms.py 表單,用戶在瀏覽器上輸入數據提交,對數據的驗證工做以及輸入框的生成等工做,固然你也能夠不使用。
templates 文件夾 views.py 中的函數渲染templates中的Html模板,獲得動態內容的網頁,固然能夠用緩存來提升速度。
admin.py 後臺,能夠用不多量的代碼就擁有一個強大的後臺。
settings.py Django 的設置,配置文件,好比 DEBUG 的開關,靜態文件的位置等。
#6.Django基本命令
django-admin.py startproject project_name
特別是在 windows 上,若是報錯,嘗試用 django-admin 代替 django-admin.py 試試
複製代碼
注意 project_name 是本身的項目名稱,須要爲合法的 Python 包名,如不能爲 1a 或 a-b。
python manage.py startapp app_name
或 django-admin.py startapp app_name
複製代碼
通常一個項目有多個app, 固然通用的app也能夠在多個項目中使用。 與項目名相似 app name 也須要爲合法的 Python 包名,如 blog,news, aboutus 等都是合法的 app 名稱。
Django 1.7.1及以上 用如下命令
# 1. 建立更改的文件
python manage.py makemigrations
# 2. 將生成的py文件應用到數據庫
python manage.py migrate
舊版本的Django 1.6及如下用
python manage.py syncdb
複製代碼
這種方法能夠在SQL等數據庫中建立與models.py代碼對應的表,不須要本身手動執行SQL。 備註:對已有的 models 進行修改,Django 1.7以前的版本的Django都是沒法自動更改表結構的,不過有第三方工具 south
python manage.py runserver
# 當提示端口被佔用的時候,能夠用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(固然也能夠kill掉佔用端口的進程)
# 監聽機器全部可用 ip (電腦可能有多個內網ip或多個外網ip)
python manage.py runserver 0.0.0.0:8000
# 若是是外網或者局域網電腦上能夠用其它電腦查看開發服務器
# 訪問對應的 ip加端口,好比 http://172.16.20.2:8000
複製代碼
python manage.py flush
複製代碼
此命令會詢問是 yes 仍是 no, 選擇 yes 會把數據所有清空掉,只留下空表。
python manage.py createsuperuser
# 按照提示輸入用戶名和對應的密碼就行了郵箱能夠留空,用戶名和密碼必填
# 修改 用戶密碼能夠用:
python manage.py changepassword username
複製代碼
python manage.py shell
複製代碼
#7. Django視圖與網址 ###1.Django中網址是寫在 urls.py 文件中,用正則表達式對應 views.py 中的一個函數(或者generic類)。
django-admin startproject zebk
複製代碼
備註: 若是 django-admin 不行,請用 django-admin.py 2. 新建一個應用(app), 名稱叫 zhong
python manage.py startapp zhong # zhong 是一個app的名稱
複製代碼
把咱們新定義的app加到settings.py中的INSTALL_APPS中 修改 mysite/mysite/settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'zhong',
)
複製代碼
做用:新建的 app 若是不加到 INSTALL_APPS 中的話, django 就不能自動找到app中的模板文件(app-name/templates/下的文件)和靜態文件(app-name/static/中的文件)
###2.定義視圖函數(即訪問頁面時顯示的內容) 打開/zebk下的views.py文件 增長如下內容
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def index(request):
return HttpResponse(u"hellow 中二病控丶!")
複製代碼
utf-8
, 由於咱們在代碼中用到了中文,若是不聲明就報錯.print
同樣,只不過 HttpResponse
是把內容顯示到網頁上。index()
函數,第一個參數必須是 request,與網頁發來的請求有關,request 變量裏面包含get或post的內容,用戶瀏覽器,系統等信息在裏面(後面會講,先了解一下就能夠)。HttpResponse
對象,能夠通過一些處理,最終顯示幾個字到網頁上。###3. 定義視圖函數函數相關的URL
# mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^zhong/', include('zhong.urls')),
url(r'^admin/', admin.site.urls),
]
複製代碼
2.在zhong中建立urls.py,編寫以下:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
複製代碼
而後在終端上運行 python manage.py runserver 咱們會看到相似下面的信息:
python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
December 22, 2015 - 11:57:33
Django version 1.9, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
複製代碼
打開網頁,輸入127.0.0.1:8000/zhong/
#8.管理操做
python manage.py createsuperuser,按提示輸入用戶名、郵箱、密碼
複製代碼
###管理界面本地化
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
複製代碼
###向admin註冊booktest的模型
from django.contrib import admin
from models import BookInfo
admin.site.register(BookInfo)
複製代碼
刷新管理頁面,能夠對BookInfo的數據進行增刪改查操做
問題:若是在str方法中返回中文,在修改和添加時會報ascii的錯誤
解決:在str()方法中,將字符串末尾添加「.encode('utf-8')」 ###自定義管理頁面
Django提供了admin.ModelAdmin類
經過定義ModelAdmin的子類,來定義模型在Admin界面的顯示方式
class QuestionAdmin(admin.ModelAdmin):
...
admin.site.register(Question, QuestionAdmin)
複製代碼
#####列表頁屬性
list_display = ['pk', 'btitle', 'bpub_date']
複製代碼
list_filter = ['btitle']
複製代碼
search_fields = ['btitle']
複製代碼
list_per_page = 10
複製代碼
#####添加、修改頁屬性
fields = ['bpub_date', 'btitle']
複製代碼
fieldsets = [
('basic',{'fields': ['btitle']}),
('more', {'fields': ['bpub_date']}),
]
複製代碼
#####關聯對象
對於HeroInfo模型類,有兩種註冊方式
按照BookInfor的註冊方式完成HeroInfo的註冊
接下來實現關聯註冊
from django.contrib import admin
from models import BookInfo,HeroInfo
class HeroInfoInline(admin.StackedInline):
model = HeroInfo
extra = 2
class BookInfoAdmin(admin.ModelAdmin):
inlines = [HeroInfoInline]
admin.site.register(BookInfo, BookInfoAdmin)
複製代碼
class HeroInfoInline(admin.TabularInline)
複製代碼
#####布爾值的顯示
def gender(self):
if self.hgender:
return '男'
else:
return '女'
gender.short_description = '性別'
在admin註冊中使用gender代替hgender
class HeroInfoAdmin(admin.ModelAdmin):
list_display = ['id', 'hname', 'gender', 'hcontent']
複製代碼