Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其餘WEB框架其優點爲:大而全,框架自己集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。javascript
一、建立django程序css
其餘經常使用命令:html
python manage.py runserver 0.0.0.0
python manage.py startapp appname
python manage.py syncdb
python manage.py makemigrations
python manage.py migrate前端
python manage.py createsuperuserjava
二、程序目錄python
三、配置文件mysql
3.1 數據庫正則表達式
django默認配置數據庫:sql
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
如下將django數據庫修改成mysql數據庫
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': 'localhost', # 鏈接本地的數據庫,也能夠不寫,默認是本地 'PORT': 3306, } }
因爲Django內部鏈接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,因此須要使用pymysql來代替
以下設置放置的與project同名的配置的 __init__.py文件中
1
2
|
import
pymysql
pymysql.install_as_MySQLdb()
|
3.2 模版
TEMPLATE_DIRS = ( os.path.join(BASE_DIR,'templates'), )
3.3 靜態文件
STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), )
3.4 新增APP
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', 'app02', ]
URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL與要爲該URL調用的視圖函數之間的映射表;
你就是以這種方式告訴Django,對於這個URL調用這段代碼,對於那個URL調用那段代碼
urlpatterns = [ url(正則表達式, views視圖函數,參數,別名), ] 參數說明: 一個正則表達式字符串 一個可調用對象,一般爲一個視圖函數或一個指定視圖函數路徑的字符串 可選的要傳遞給視圖函數的默認參數(字典形式) 一個可選的name參數
一、單一路由對應
1
|
url(r
'^index$'
, views.index),
|
二、基於正則的路由
# $ url(r'^index/(\d{4})$',views.index) #無命名分組 url(r'^index/(\d{4})/(\d{2})',views.index) #有命名分組 url(r'^index/(?P<year>\d{4})/(?P<month>\d{2})',views.index)
有無命名分組 演示
############################無命名 #至關於傳參數 url(r'^index/(\d{4})',views.index) def index(request,arg): return HttpResponse(arg) #url訪問http://127.0.0.1:8000/index/1113 #接受兩個參數 url(r'^index/(\d{4})/(\d{2})',views.index) def index(request,arg,arg1): return HttpResponse("year: %s month: %s"%(arg,arg1)) #url訪問http://127.0.0.1:8000/index/2017/06 year: 2017 month: 06 ############################有命名 url(r'^index/(?P<year>\d{4})/(?P<month>\d{2})',views.index) def index(request,year,month): return HttpResponse("year: %s month: %s"%(year,month)) #url訪問http://127.0.0.1:8000/index/2017/06 year: 2017 month: 06
三、添加額外的參數
1
|
url(r
'^manage/(?P<name>\w*)'
, views.manage,{
'id'
:
333
}),
|
四、爲路由映射設置名稱及使用
#應用一: url(r'^index',views.index,name="arg") {{ url "arg" }} 匹配index {{ url "arg" i}} #應用二: reverse反向獲取url ##############根據url反生成名字 from django.shortcuts import reverse url(r'^index',views.index,name="arg") def index(request): v = reverse("arg") print(v) return HttpResponse() #用戶訪問http://127.0.0.1:8000/index /index ##############根據url改變url url(r'^index/(\d+)/',views.index,name="n1") def index(request,xx): v = reverse('n1',args=(1,)) print(v) return HttpResponse("...") #訪問http://127.0.0.1:8000/index/222/ /index/1/
url(r'^home', views.home, name='h1'), url(r'^index/(\d*)', views.index, name='h2'),
設置名稱以後,能夠在不一樣的地方調用,如:
class NewType(models.Model): caption = models.CharField(max_length=16) def get_absolute_url(self): """ 爲每一個對象生成一個URL 應用:在對象列表中生成查看詳細的URL,使用此方法便可!!! :return: """ # return '/%s/%s' % (self._meta.db_table, self.id) # 或 from django.urls import reverse return reverse('NewType.Detail', kwargs={'nid': self.id})
獲取請求匹配成功的URL信息:request.resolver_match
五、根據app對路由規則進行分發
1
2
3
4
5
|
url(r
'^app01/'
,include(
"app01.urls"
))
url(r
'^app02/'
,include(
"app02.urls"
))
#沒有匹配成功,返回默認頁面
url(r
'^'
,include(
"views.default"
))
|
六、命名空間
6.1 project.urls.py
1
2
3
4
5
6
|
from
django.conf.urls
import
url,include
urlpatterns
=
[
url(r
'^a/'
, include(
'app01.urls'
, namespace
=
'author-polls'
)),
url(r
'^b/'
, include(
'app01.urls'
, namespace
=
'publisher-polls'
)),
]
|
6.2 app01.urls.py
1
2
3
4
5
6
7
|
from
django.conf.urls
import
url
from
app01
import
views
app_name
=
'app01'
urlpatterns
=
[
url(r
'^(?P<pk>\d+)/$'
, views.detail, name
=
'detail'
)
]
|
6.3 app01.views.py
1
2
3
|
def
detail(request, pk):
print
(request.resolver_match)
return
HttpResponse(pk)
|
以上定義帶命名空間的url以後,使用name生成URL時候,應該以下:
django中的路由系統和其餘語言的框架有所不一樣,在django中每個請求的url都要有一條路由映射,這樣才能將請求交給對一個的view中的函數去處理。其餘大部分的Web框架則是對一類的url請求作一條路由映射,從而是路由系統變得簡潔。
經過反射機制,爲django開發一套動態的路由系統Demo: 點擊下載
一、模版的執行
模版的建立過程,對於模版,其實就是讀取模版(其中嵌套着模版標籤),而後將 Model 中獲取的數據插入到模版中,最後將信息返回給用戶。
1
2
3
4
|
def
current_datetime(request):
now
=
datetime.datetime.now()
html
=
"<html><body>It is now %s.</body></html>"
%
now
return
HttpResponse(html)
|
1
2
3
4
|
from
django
import
template
t
=
template.Template(
'My name is {{ name }}.'
)
c
=
template.Context({
'name'
:
'Adrian'
})
print
t.render(c)
|
1
2
3
4
5
6
7
8
9
10
|
import
datetime
from
django
import
template
import
DjangoDemo.settings
now
=
datetime.datetime.now()
fp
=
open
(settings.BASE_DIR
+
'/templates/Home/Index.html'
)
t
=
template.Template(fp.read())
fp.close()
html
=
t.render(template.Context({
'current_date'
: now}))
return
HttpResponse(html)
|
1
2
3
4
5
6
7
8
9
10
|
from
django.template.loader
import
get_template
from
django.template
import
Context
from
django.http
import
HttpResponse
import
datetime
def
current_datetime(request):
now
=
datetime.datetime.now()
t
=
get_template(
'current_datetime.html'
)
html
=
t.render(Context({
'current_date'
: now}))
return
HttpResponse(html)
|
1
|
return
render_to_response(
'Account/Login.html'
,data,context_instance
=
RequestContext(request))
|
二、模版語言
模板中也有本身的語言,該語言能夠實現數據展現
1
2
3
4
5
6
|
{{ item }}
{
%
for
item
in
item_list
%
} <a>{{ item }}<
/
a> {
%
endfor
%
}
forloop.counter
forloop.first
forloop.last
{
%
if
ordered_warranty
%
} {
%
else
%
} {
%
endif
%
}
|
母版與子板的使用
1
2
3
4
5
6
7
8
9
|
母板layout.html:
{
%
block css
%
}{
%
endblock
%
}
# 母版區域設置子板css內容位置,被子板css替換
{
%
block js
%
}{
%
endblock
%
}
# 母版區域設置子板js內容位置,被子板js替換
{
%
block xx
%
}{
%
endblock
%
}
# 母版區域設置子板xx內容位置,被子板xx替換
子板:
{
%
extends
"layout.html"
%
}
{
%
block css
%
}....{
%
endblock
%
}
# 省略號部分放子板本身的css內容
{
%
block js
%
}....{
%
endblock
%
}
# 省略號部分放子板本身的js內容
{
%
block xx
%
}....{
%
endblock
%
}
# 省略號部分放子板本身的xx內容
|
組件的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
組件:pub.html
pub.html
<div>
<h3>特別漂亮的組件<
/
h3>
<div
class
=
"title"
>標題:{{ name }}<
/
div>
<div
class
=
"content"
>內容:{{ name }}<
/
div>
<
/
div>
組件的使用:{
%
include
'pub.html'
%
}
test.html
<!DOCTYPE html>
<html lang
=
"en"
>
<head>
<meta charset
=
"UTF-8"
>
<title><
/
title>
<
/
head>
<body>
{
%
include
'pub.html'
%
}
{
%
include
'pub.html'
%
}
{
%
include
'pub.html'
%
}
<
/
body>
<
/
html>
|
模板自定義函數
1
2
|
{{ name|upper }}
# 自動將後端傳來的name轉換爲大寫
{{ name|lower }}
# 自動將後端傳來的name轉換爲小寫
|
三、自定義simple_tag
a、在app中建立templatetags模塊,必須是templatetags命名
b、建立任意 .py 文件,如:xx.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from
django
import
template
register
=
template.Library()
# register必須是這個變量名
@register
.
filter
def
my_upper(value,arg):
return
value
+
arg
@register
.
filter
def
my_bool(value):
return
False
@register
.simple_tag
# 與@register.filter效果同樣,前端頁面使用起來不同
def
my_lower(value,a1,a2,a3):
return
value
+
a1
+
a2
+
a3
|
c、在使用自定義simple_tag的html文件時,在當前test.html頁面中導入以前建立的 xx.py 文件名
1
|
{
%
load xx
%
}
|
d、使用filter
1
2
3
4
5
6
7
8
|
{{ name|my_upper:
"666"
}}
# {{第一個參數|函數名稱:"第二個參數"}},當只有一個參數時使用{{ name|my_upper }}
# 使用filter有限制,最多隻能使用2個參數,可是filter可使用判斷,能夠做爲條件語句判斷,可是simple_tag不能做爲條件語句判斷
{
%
if
name|my_bool
%
}
<h3>真<
/
h3>
{
%
else
%
}
<h3>假<
/
h3>
{
%
endif
%
}
|
e、使用simple_tag
1
|
{
%
my_lower
"XYP"
"XYP1"
"XYP2"
"XYP3"
%
}
# {% 函數名 參數 參數 ...%} 能夠有多個參數
|
f、在settings中配置當前app,否則django沒法找到自定義的simple_tag
1
2
3
4
5
6
7
8
9
|
INSTALLED_APPS
=
(
'django.contrib.admin'
,
'django.contrib.auth'
,
'django.contrib.contenttypes'
,
'django.contrib.sessions'
,
'django.contrib.messages'
,
'django.contrib.staticfiles'
,
'app01'
,
)
|
更多見文檔:https://docs.djangoproject.com/en/1.10/ref/templates/language/
django amdin是django提供的一個後臺管理頁面,改管理頁面提供完善的html和css,使得你在經過Model建立完數據庫表以後,就能夠對數據進行增刪改查,而使用django admin 則須要如下步驟:
一、建立後臺管理員
1
|
python manage.py createsuperuser
|
二、配置後臺管理url
url(r
'^admin/'
, include(admin.site.urls))
三、註冊和配置django admin 後臺管理頁面
a、在admin中執行以下配置
from django.contrib import admin from app01 import models admin.site.register(models.UserType) admin.site.register(models.UserInfo) admin.site.register(models.UserGroup) admin.site.register(models.Asset)
b、設置數據表名稱
class UserType(models.Model): name = models.CharField(max_length=50) class Meta: verbose_name = '用戶類型' verbose_name_plural = '用戶類型'
c、打開表以後,設定默認顯示,須要在model中做以下配置
class UserType(models.Model): name = models.CharField(max_length=50) def __unicode__(self): return self.name
from django.contrib import admin from app01 import models class UserInfoAdmin(admin.ModelAdmin): list_display = ('username', 'password', 'email') admin.site.register(models.UserType) admin.site.register(models.UserInfo,UserInfoAdmin) admin.site.register(models.UserGroup) admin.site.register(models.Asset)
d、爲數據表添加搜索功能
from django.contrib import admin from app01 import models class UserInfoAdmin(admin.ModelAdmin): list_display = ('username', 'password', 'email') search_fields = ('username', 'email') admin.site.register(models.UserType) admin.site.register(models.UserInfo,UserInfoAdmin) admin.site.register(models.UserGroup) admin.site.register(models.Asset)
e、添加快速過濾
from django.contrib import admin from app01 import models class UserInfoAdmin(admin.ModelAdmin): list_display = ('username', 'password', 'email') search_fields = ('username', 'email') list_filter = ('username', 'email') admin.site.register(models.UserType) admin.site.register(models.UserInfo,UserInfoAdmin) admin.site.register(models.UserGroup) admin.site.register(models.Asset)
1
2
3
4
|
MVC,MTV(建立project文件下的目錄,目錄名不一樣,即MVC和MTV)
models(數據庫,模型) views(html模板) controllers(業務邏輯處理)
-
-
> MVC
models(數據庫,模型) templates(html模板) views(業務邏輯處理)
-
-
> MTV
Django
-
> MTV,Django建立目錄是MTV形式
|
Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其餘WEB框架其優點爲:大而全,框架自己集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。
一、建立django程序
其餘經常使用命令:
python manage.py runserver 0.0.0.0
python manage.py startapp appname
python manage.py syncdb
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
二、程序目錄
三、配置文件
3.1 數據庫
django默認配置數據庫:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
如下將django數據庫修改成mysql
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': 'localhost', # 鏈接本地的數據庫,也能夠不寫,默認是本地 'PORT': 3306, } }
因爲Django內部鏈接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,因此須要使用pymysql來代替
以下設置放置的與project同名的配置的 __init__.py文件中
1
2
|
import
pymysql
pymysql.install_as_MySQLdb()
|
3.2 模版
TEMPLATE_DIRS = ( os.path.join(BASE_DIR,'templates'), )
3.3 靜態文件
STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), )
3.4 新增APP
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', 'app02', ]
URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL與要爲該URL調用的視圖函數之間的映射表;
你就是以這種方式告訴Django,對於這個URL調用這段代碼,對於那個URL調用那段代碼
urlpatterns = [ url(正則表達式, views視圖函數,參數,別名), ] 參數說明: 一個正則表達式字符串 一個可調用對象,一般爲一個視圖函數或一個指定視圖函數路徑的字符串 可選的要傳遞給視圖函數的默認參數(字典形式) 一個可選的name參數
一、單一路由對應
1
|
url(r
'^index$'
, views.index),
|
二、基於正則的路由
# $ url(r'^index/(\d{4})$',views.index) #無命名分組 url(r'^index/(\d{4})/(\d{2})',views.index) #有命名分組 url(r'^index/(?P<year>\d{4})/(?P<month>\d{2})',views.index)
有無命名分組 演示
############################無命名 #至關於傳參數 url(r'^index/(\d{4})',views.index) def index(request,arg): return HttpResponse(arg) #url訪問http://127.0.0.1:8000/index/1113 #接受兩個參數 url(r'^index/(\d{4})/(\d{2})',views.index) def index(request,arg,arg1): return HttpResponse("year: %s month: %s"%(arg,arg1)) #url訪問http://127.0.0.1:8000/index/2017/06 year: 2017 month: 06 ############################有命名 url(r'^index/(?P<year>\d{4})/(?P<month>\d{2})',views.index) def index(request,year,month): return HttpResponse("year: %s month: %s"%(year,month)) #url訪問http://127.0.0.1:8000/index/2017/06 year: 2017 month: 06
三、添加額外的參數
1
|
url(r
'^manage/(?P<name>\w*)'
, views.manage,{
'id'
:
333
}),
|
四、爲路由映射設置名稱及使用
#應用一: url(r'^index',views.index,name="arg") {{ url "arg" }} 匹配index {{ url "arg" i}} #應用二: reverse反向獲取url ##############根據url反生成名字 from django.shortcuts import reverse url(r'^index',views.index,name="arg") def index(request): v = reverse("arg") print(v) return HttpResponse() #用戶訪問http://127.0.0.1:8000/index /index ##############根據url改變url url(r'^index/(\d+)/',views.index,name="n1") def index(request,xx): v = reverse('n1',args=(1,)) print(v) return HttpResponse("...") #訪問http://127.0.0.1:8000/index/222/ /index/1/
url(r'^home', views.home, name='h1'), url(r'^index/(\d*)', views.index, name='h2'),
設置名稱以後,能夠在不一樣的地方調用,如:
class NewType(models.Model): caption = models.CharField(max_length=16) def get_absolute_url(self): """ 爲每一個對象生成一個URL 應用:在對象列表中生成查看詳細的URL,使用此方法便可!!! :return: """ # return '/%s/%s' % (self._meta.db_table, self.id) # 或 from django.urls import reverse return reverse('NewType.Detail', kwargs={'nid': self.id})
獲取請求匹配成功的URL信息:request.resolver_match
五、根據app對路由規則進行分發
1
2
3
4
5
|
url(r
'^app01/'
,include(
"app01.urls"
))
url(r
'^app02/'
,include(
"app02.urls"
))
#沒有匹配成功,返回默認頁面
url(r
'^'
,include(
"views.default"
))
|
六、命名空間
6.1 project.urls.py
1
2
3
4
5
6
|
from
django.conf.urls
import
url,include
urlpatterns
=
[
url(r
'^a/'
, include(
'app01.urls'
, namespace
=
'author-polls'
)),
url(r
'^b/'
, include(
'app01.urls'
, namespace
=
'publisher-polls'
)),
]
|
6.2 app01.urls.py
1
2
3
4
5
6
7
|
from
django.conf.urls
import
url
from
app01
import
views
app_name
=
'app01'
urlpatterns
=
[
url(r
'^(?P<pk>\d+)/$'
, views.detail, name
=
'detail'
)
]
|
6.3 app01.views.py
1
2
3
|
def
detail(request, pk):
print
(request.resolver_match)
return
HttpResponse(pk)
|
以上定義帶命名空間的url以後,使用name生成URL時候,應該以下:
django中的路由系統和其餘語言的框架有所不一樣,在django中每個請求的url都要有一條路由映射,這樣才能將請求交給對一個的view中的函數去處理。其餘大部分的Web框架則是對一類的url請求作一條路由映射,從而是路由系統變得簡潔。
經過反射機制,爲django開發一套動態的路由系統Demo: 點擊下載
一、模版的執行
模版的建立過程,對於模版,其實就是讀取模版(其中嵌套着模版標籤),而後將 Model 中獲取的數據插入到模版中,最後將信息返回給用戶。
1
2
3
4
|
def
current_datetime(request):
now
=
datetime.datetime.now()
html
=
"<html><body>It is now %s.</body></html>"
%
now
return
HttpResponse(html)
|
1
2
3
4
|
from
django
import
template
t
=
template.Template(
'My name is {{ name }}.'
)
c
=
template.Context({
'name'
:
'Adrian'
})
print
t.render(c)
|
1
2
3
4
5
6
7
8
9
10
|
import
datetime
from
django
import
template
import
DjangoDemo.settings
now
=
datetime.datetime.now()
fp
=
open
(settings.BASE_DIR
+
'/templates/Home/Index.html'
)
t
=
template.Template(fp.read())
fp.close()
html
=
t.render(template.Context({
'current_date'
: now}))
return
HttpResponse(html)
|
1
2
3
4
5
6
7
8
9
10
|
from
django.template.loader
import
get_template
from
django.template
import
Context
from
django.http
import
HttpResponse
import
datetime
def
current_datetime(request):
now
=
datetime.datetime.now()
t
=
get_template(
'current_datetime.html'
)
html
=
t.render(Context({
'current_date'
: now}))
return
HttpResponse(html)
|
1
|
return
render_to_response(
'Account/Login.html'
,data,context_instance
=
RequestContext(request))
|
二、模版語言
模板中也有本身的語言,該語言能夠實現數據展現
1
2
3
4
5
6
|
{{ item }}
{
%
for
item
in
item_list
%
} <a>{{ item }}<
/
a> {
%
endfor
%
}
forloop.counter
forloop.first
forloop.last
{
%
if
ordered_warranty
%
} {
%
else
%
} {
%
endif
%
}
|
母版與子板的使用
1
2
3
4
5
6
7
8
9
|
母板layout.html:
{
%
block css
%
}{
%
endblock
%
}
# 母版區域設置子板css內容位置,被子板css替換
{
%
block js
%
}{
%
endblock
%
}
# 母版區域設置子板js內容位置,被子板js替換
{
%
block xx
%
}{
%
endblock
%
}
# 母版區域設置子板xx內容位置,被子板xx替換
子板:
{
%
extends
"layout.html"
%
}
{
%
block css
%
}....{
%
endblock
%
}
# 省略號部分放子板本身的css內容
{
%
block js
%
}....{
%
endblock
%
}
# 省略號部分放子板本身的js內容
{
%
block xx
%
}....{
%
endblock
%
}
# 省略號部分放子板本身的xx內容
|
組件的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
組件:pub.html
pub.html
<div>
<h3>特別漂亮的組件<
/
h3>
<div
class
=
"title"
>標題:{{ name }}<
/
div>
<div
class
=
"content"
>內容:{{ name }}<
/
div>
<
/
div>
組件的使用:{
%
include
'pub.html'
%
}
test.html
<!DOCTYPE html>
<html lang
=
"en"
>
<head>
<meta charset
=
"UTF-8"
>
<title><
/
title>
<
/
head>
<body>
{
%
include
'pub.html'
%
}
{
%
include
'pub.html'
%
}
{
%
include
'pub.html'
%
}
<
/
body>
<
/
html>
|
模板自定義函數
1
2
|
{{ name|upper }}
# 自動將後端傳來的name轉換爲大寫
{{ name|lower }}
# 自動將後端傳來的name轉換爲小寫
|
三、自定義simple_tag
a、在app中建立templatetags模塊,必須是templatetags命名
b、建立任意 .py 文件,如:xx.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from
django
import
template
register
=
template.Library()
# register必須是這個變量名
@register
.
filter
def
my_upper(value,arg):
return
value
+
arg
@register
.
filter
def
my_bool(value):
return
False
@register
.simple_tag
# 與@register.filter效果同樣,前端頁面使用起來不同
def
my_lower(value,a1,a2,a3):
return
value
+
a1
+
a2
+
a3
|
c、在使用自定義simple_tag的html文件時,在當前test.html頁面中導入以前建立的 xx.py 文件名
1
|
{
%
load xx
%
}
|
d、使用filter
1
2
3
4
5
6
7
8
|
{{ name|my_upper:
"666"
}}
# {{第一個參數|函數名稱:"第二個參數"}},當只有一個參數時使用{{ name|my_upper }}
# 使用filter有限制,最多隻能使用2個參數,可是filter可使用判斷,能夠做爲條件語句判斷,可是simple_tag不能做爲條件語句判斷
{
%
if
name|my_bool
%
}
<h3>真<
/
h3>
{
%
else
%
}
<h3>假<
/
h3>
{
%
endif
%
}
|
e、使用simple_tag
1
|
{
%
my_lower
"XYP"
"XYP1"
"XYP2"
"XYP3"
%
}
# {% 函數名 參數 參數 ...%} 能夠有多個參數
|
f、在settings中配置當前app,否則django沒法找到自定義的simple_tag
1
2
3
4
5
6
7
8
9
|
INSTALLED_APPS
=
(
'django.contrib.admin'
,
'django.contrib.auth'
,
'django.contrib.contenttypes'
,
'django.contrib.sessions'
,
'django.contrib.messages'
,
'django.contrib.staticfiles'
,
'app01'
,
)
|
更多見文檔:https://docs.djangoproject.com/en/1.10/ref/templates/language/
django amdin是django提供的一個後臺管理頁面,改管理頁面提供完善的html和css,使得你在經過Model建立完數據庫表以後,就能夠對數據進行增刪改查,而使用django admin 則須要如下步驟:
一、建立後臺管理員
1
|
python manage.py createsuperuser
|
二、配置後臺管理url
url(r
'^admin/'
, include(admin.site.urls))
三、註冊和配置django admin 後臺管理頁面
a、在admin中執行以下配置
from django.contrib import admin from app01 import models admin.site.register(models.UserType) admin.site.register(models.UserInfo) admin.site.register(models.UserGroup) admin.site.register(models.Asset)
b、設置數據表名稱
class UserType(models.Model): name = models.CharField(max_length=50) class Meta: verbose_name = '用戶類型' verbose_name_plural = '用戶類型'
c、打開表以後,設定默認顯示,須要在model中做以下配置
class UserType(models.Model): name = models.CharField(max_length=50) def __unicode__(self): return self.name
from django.contrib import admin from app01 import models class UserInfoAdmin(admin.ModelAdmin): list_display = ('username', 'password', 'email') admin.site.register(models.UserType) admin.site.register(models.UserInfo,UserInfoAdmin) admin.site.register(models.UserGroup) admin.site.register(models.Asset)
d、爲數據表添加搜索功能
from django.contrib import admin from app01 import models class UserInfoAdmin(admin.ModelAdmin): list_display = ('username', 'password', 'email') search_fields = ('username', 'email') admin.site.register(models.UserType) admin.site.register(models.UserInfo,UserInfoAdmin) admin.site.register(models.UserGroup) admin.site.register(models.Asset)
e、添加快速過濾
from django.contrib import admin from app01 import models class UserInfoAdmin(admin.ModelAdmin): list_display = ('username', 'password', 'email') search_fields = ('username', 'email') list_filter = ('username', 'email') admin.site.register(models.UserType) admin.site.register(models.UserInfo,UserInfoAdmin) admin.site.register(models.UserGroup) admin.site.register(models.Asset)
1
2
3
4
|
MVC,MTV(建立project文件下的目錄,目錄名不一樣,即MVC和MTV)
models(數據庫,模型) views(html模板) controllers(業務邏輯處理)
-
-
> MVC
models(數據庫,模型) templates(html模板) views(業務邏輯處理)
-
-
> MTV
Django
-
> MTV,Django建立目錄是MTV形式
|