1.環(huán)境安裝
django支持python3+,且只支持python2.7
1)安裝python
https://www.python.org/downloads/release/python-2715/
2)安裝django
django 對(duì)python的支持情況
安裝1.10.2版本django
pip install Django==1.10.2
判斷django是否安裝成功:
python -m django --version
2.創(chuàng)建django
安裝完django后命令行中就多了行django命令,選擇好安裝目錄
django-amdin startproject myblog (項(xiàng)目名稱:myblog 定義好名稱后運(yùn)用時(shí)不建議修改妆距,配置文件中也是以myblog命名配置)
項(xiàng)目結(jié)構(gòu):
1.manage.py
與項(xiàng)目進(jìn)行交互的命令行工具集的入口(項(xiàng)目管理器)
啟動(dòng)命令:
python manage.py runserver
python manage.py runserver + 端口號(hào)
默認(rèn)端口 8000
2.wsgi.py(基本不用修改)
WSGI(Python Web Server Gateway Interface)
python服務(wù)器網(wǎng)關(guān)接口
python應(yīng)用與web服務(wù)器之間的接口
3.urls.py
配置url
4.settings.py
項(xiàng)目的總配置文件
里面包含數(shù)據(jù)庫、web應(yīng)用糖声、時(shí)間等各種配置
1.BASE_DIR :項(xiàng)目根目錄
2.SECRET_KEY:項(xiàng)目安全碼
3.DEBUG:不要在實(shí)際生產(chǎn)中打開
4.ALLOWED_HOSTS:只允許外部訪問地址
5.INSTALLED_APPS:django應(yīng)用
6.MIDDLEWARE:中間件
7.ROOT_URLCONF:url根路徑
8.TEMPLATES:模板文件
9.DATABASES:數(shù)據(jù)庫配置妙色,默認(rèn)是sqlite,如要自定義數(shù)據(jù)庫到 https://docs.djangoproject.com/en/1.10/ref/settings/#databases 中尋找配置方式
10.AUTH_PASSWORD_VALIDATORS:密碼認(rèn)證
11.STATIC_URL:靜態(tài)文件
5.init.py
聲明模塊文件绑青,一般為空
3.創(chuàng)建應(yīng)用
1.打開命令行盆顾,進(jìn)入項(xiàng)目中manage.py同級(jí)目錄
2. 輸入命令:python manage.py startapp blog
3. 添加應(yīng)用名到settings.py 中的INSTALLED_APPS中
4.應(yīng)用目錄介紹
1.migrations
數(shù)據(jù)移植(遷移) 模塊
2.admin.py
該應(yīng)用的后臺(tái)管理系統(tǒng)配置
3.apps.py
該應(yīng)用 的配置
1.8+后自動(dòng)生成
4.models.py
數(shù)據(jù)模塊怠褐,使用ORM框架,類似MVC的模型
5.test.py
自動(dòng)化測試模塊
6.views.py
執(zhí)行響應(yīng)代碼所在模塊
代碼邏輯處理的主要地點(diǎn)
項(xiàng)目大部分代碼在這編寫
5.創(chuàng)建第一個(gè)響應(yīng)
代碼:
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello,world!")
配置url:myblog>urls.py
查看結(jié)果:
6.配置url
1)在blog目錄下創(chuàng)建urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^index/', views.index),
]
2)在urls.py中引用blog.urls
7.Template
1.
Django使用了一種特殊的模板語言(Django Template Language,DTL)
可以使用第三方模板Jinja2
1)在APP的根目錄下創(chuàng)建Templates的目錄
2)在該目錄下創(chuàng)建HTML文件
3)在views.py中返回render
from django.shortcuts import render
from django.http import HttpResponse
#render包含三個(gè)參數(shù)您宪,第一個(gè)是request請(qǐng)求奈懒,第二個(gè)是返回頁面地址(即html),第三個(gè)為返回?cái)?shù)據(jù)
def index(request):
return render(request, 'index.html')
2.DTL初步使用
render()函數(shù)中支持一個(gè)dict類型參數(shù)(鍵值對(duì))
該字典是后臺(tái)參數(shù)傳遞到模板的參數(shù)宪巨,鍵為參數(shù)名
在模板中使用{{參數(shù)名}}來直接使用
views.py:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request, 'index.html', {'hello': 'Hello,Blog!'})
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{hello}}</h1>
</body>
</html>
***Django第一個(gè)坑
Django查找Template
Django按照INSTALLED_APP中的添加順序查找Templates
不同APP下Templates目錄中的同名.html文件會(huì)造成沖突
解決方案
在APP的Templates目錄下創(chuàng)建以APP名為名稱的目錄
將html文件放入新創(chuàng)建的目錄下
8.Models
ORM(對(duì)象關(guān)系映射)
實(shí)現(xiàn)了對(duì)象與數(shù)據(jù)之間的映射
隱藏了數(shù)據(jù)訪問的細(xì)節(jié)磷杏,不需要編寫sql語句
通常,一個(gè)Model對(duì)應(yīng)數(shù)據(jù)庫的一張數(shù)據(jù)表
Django中Models以類的形式表現(xiàn)
它包含了一些基本字段以及數(shù)據(jù)的一些行為
1)在應(yīng)用根目錄下創(chuàng)建models.py揖铜,并引入models模塊(Django已完成)
2)創(chuàng)建類茴丰,繼承models.Model,該類即是一張數(shù)據(jù)表
3)在類中創(chuàng)建字段
字段即類里面的屬性(變量)
attr=models.CharField(max_length=64)
models.py:
from __future__ import unicode_literals
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=32, default='Title')
content = models.TextField(nul=True)
4)生成數(shù)據(jù)表
1.命令行中進(jìn)入manage.py同級(jí)目錄
2.執(zhí)行python manage.py makemigrations app名(可選)
3.再執(zhí)行python manage.py migrate
4.Django在app/migrations/目錄下生成移植文件
5.執(zhí)行python manage.py sqlmigrate 應(yīng)用名 文件id 查看SQL語句
6.默認(rèn)sqlite3的數(shù)據(jù)庫在項(xiàng)目根目錄下db.sqlite3
5)頁面數(shù)據(jù)呈現(xiàn)
1.views.py中import models
2.article = models.Article.objects.get(pk=1)
3. render(request,page,{'article' : article})
views.py:
from django.shortcuts import render
from django.http import HttpResponse
from . import models
def index(request):
article = models.Article.objects.get(pk=1)
return render(request, 'blog/index.html', {'article': article})
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{article.id}}</h1>
<h1>{{article.title}}</h1>
<h1>{{article.content}}</h1>
</body>
</html>
9.Admin
Admin是Django自帶的一個(gè)功能強(qiáng)大的自動(dòng)化數(shù)據(jù)管理頁面
被授權(quán)的用戶可直接在Admin中管理數(shù)據(jù)庫
Django提供了許多針對(duì)Admin的定制功能
1)配置Admin
1.創(chuàng)建用戶
python manage.py createsuperuser 創(chuàng)建超級(jí)用戶
2.localhost:8000/admin/ Admin 入口
3.修改settings.py 中 LANGUAGE_CODE='zh_Hans' 英文變中文操作界面
2)配置應(yīng)用
1.在應(yīng)用下admin.py中引入自身的models模塊(或里面的模型類)
2.編輯admin.py: admin.site.register(models.Article)
admin.py:
from django.contrib import admin
from models import Article
admin.site.register(Article)
3.當(dāng)前顯示很不方便,需要修改數(shù)據(jù)默認(rèn)顯示名稱
在Article類下添加一個(gè)方法
根據(jù)Python版本選擇_str_(self) 【3.0+】 或 _unicode_(self) 【2.7+】
return self.title
models.py:
from __future__ import unicode_literals
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=32, default='Title')
content = models.TextField(null=True)
def __unicode__(self):
return self.title