1,MVC模式:把web应用分为模型(Model),控制器(Controller),视图(View)三层;他们之间以一种插件似的,松耦合的方式连接在一起。
2,MTV模式:
Model(模型):负责业务对象与数据库对象(ORM)
Template(模板);负责业务逻辑,在适当的时候调用model和Template
在Django中MTV和MVC是有些一致的,除了Django有一个url分发器
1,基本变量
urls.py文件
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test/', views.test),
]
views.py文件
from django.shortcuts import render
def test(request):
num = 1
string = 'shabi'
list1 = ['laowang', 'erha', '哈哥']
dic = {
'name': 'hpl', 'age': 18, 'sex': 'M'}
tup = ('pig', 'dog', 'cat', 'panda')
set1 = {
'haha', 'xixi', 'jiji'}
return render(request, 'test.html',
{
'num': num,
'string': string,
'list1': list1,
'dic': dic,
'tup': tup,
'set1': set1,
})
templates下新建test.html文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{
{ num }}
<br>
{
{ string }}
<br>
{
{ list1.0 }}
<br>
{
{ dic.items }}, {
{ dic.keys }}, {
{ dic.values }}, {
{ dic.name }}
<br>
{
{ tup }}, {
{ tup.1 }}
<br>
{
{ set1 }}
body>
html>
views.py文件
from django.shortcuts import render
import datetime
def test(request):
num = 1
string = 'shabi'
list1 = ['laowang', 'erha', '哈哥']
dic = {
'name': 'hpl', 'age': 18, 'sex': 'M'}
tup = ('pig', 'dog', 'cat', 'panda')
set1 = {
'haha', 'xixi', 'jiji'}
now = datetime.datetime.now()
return render(request, 'test.html',
{
'num': num,
'now': now,
'haha': 'dog',
'string': string,
'list1': list1,
'dic': dic,
'tup': tup,
'kong': '',
'set1': set1,
'aa': '百度一下',
'hpl': 'hpl',
'hpl_age': 18,
'filesize': 1024 * 1024 * 1024 * 1024 * 1024,
'long_str': '人群中哭著 你只想变成透明的颜色 你再也不会梦或痛或心动了 你已经决定了 你已经决定了 '
'你静静忍著 紧紧把昨天在拳心握著 而回忆越是甜就是越伤人了 越是在手心留下密密麻麻深深浅浅的刀割 '
'你不是真正的快乐 你的笑只是你穿的保护色'
})
test.html文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{# default过滤器,即haha没有值,则将pig传给haha, 假如有值,就不使用pig #}
{
{ haha|default:'pig' }} {# :前后不能加空格,否则会报错 #}
{# 空值也会被default替换 #}
{
{ kong|default:'暂时没有数据!' }}
<br>
{# filesizeformat可视化文件大小 #}
{
{ filesize|filesizeformat }}
<br>
{# add加法 #}
{
{ 4|add:5 }}
{# add减法 #}
{
{ 9|add:-3 }}
{# 字符串为拼接 #}
{
{ 'hpl'|add:' is a shuaige' }}
{
{ list1|add:list1 }}
<br>
{# upper转大写;lower转小写;title首字母大写 #}
{
{ hpl|upper|lower|title }}
<br>
{# length表示长度 #}
{
{ list1|add:list1|length }}
<br>
{# slice表示切片,python中为[::] #}
{
{ list1|slice:'::2' }}, {
{ list1|slice:'::' }}
<br>
{
{ list1.0|first }}, {
{ list1|first }}, {
{ list1.0|last }}, {
{ list1|last }}
<br>
{# join表示用指定的字符连成一个新的字符串 #}
{
{ list1|join:'_' }}
<br>
{# truncatechars表示按字符截断 , truncatewords表示按单词(英文)进行截断#}
{
{ long_str|truncatechars:'10' }}, {
{ long_str|truncatewords:'5' }}
{# date添加时间 #}
{#{
{ now|date:'Y-m-d H:i:s' }}#}
{#也可以去setting中配置#}
{#添加:DATETIME_FORMAT = 'Y-m-d H:i:s'#}
{#修改:USE_L10N = False#}
{
{ now }}
<br>
{# 这里相当于我们写了一个a的超链接标签 #}
{
{ aa|safe }}
body>
html>
1,在app01下创建名为templatetags的python包 (包名字不能错)
2,创建一个python文件(mytags.py)
3,在mytags.py中写
from django import template
register = template.Library() (变量名不能错)
4,写函数并加上装饰器
@register.filter
def splicing(a, b): # 参数最多两个
# 功能
return ‘%s-%s’ % (a, b)
mytags.py文件
from django import template
register = template.Library()
@register.filter
def splicing(a, b): # 参数最多两个
# 功能
return '%s-%s' % (a, b)
test.html文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{# 模板中的导包 load+文件名 #}
{% load mytags %}
{
{ hpl|splicing:'dashuaige' }}
body>
html>
4,常用的forloop.
test.html文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{# counter表示序号从1开始,counter0表示序号从0开始 #}
{# revcounter表示倒序到1,revcounter0表示倒序到0 #}
{# first表示第一次循环为True,其他的都是False #}
{# last表示最后一次循环为True, 其他都是False #}
<ul>
{% for lis in list1 %}
<li>{
{ forloop.counter }} : {
{ lis }}li>
{% endfor %}
ul>
<ul>
{% for lis in list1 %}
<li>{
{ forloop.counter0 }} : {
{ lis }}li>
{% endfor %}
ul>
<ul>
{% for lis in list1 %}
<li>{
{ forloop.revcounter }} : {
{ lis }}li>
{% endfor %}
ul>
<ul>
{% for lis in list1 %}
<li>{
{ forloop.revcounter0 }} : {
{ lis }}li>
{% endfor %}
ul>
<ul>
{% for lis in list1 %}
<li>{
{ forloop.first }} : {
{ lis }}li>
{% endfor %}
ul>
<ul>
{% for lis in list1 %}
<li>{
{ forloop.last }} : {
{ lis }}li>
{% endfor %}
ul>
body>
html>
test.py文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{# {% empty %}末尾显示提示信息 #}
{% for k in kong %}
{
{ k }}
{% empty %}
其实啥都没有!!!
{% endfor %}
body>
html>
test.html文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{% if hpl_age < 20 %}
hpl还是小伙子!
{% elif hpl.age >= 20 and hpl_age < 30 %}
hpl已经老大不小了!!
{% else %}
hpl已经步入中老年!!!
{% endif %}
{# 模板语言不支持的有 #}
{# 1,不支持算术运算 #}
{# 2,不能进行连续的判断,如:9>6>2 #}
{#{% if hpl.age == 10 + 8 %}#}
{# hpl要步入成年了!#}
{#{% endif %}#}
<br>
{% if hpl_age == 10|add:8 %}
hpl要步入成年了!
{% endif %}
body>
html>
python中
js中
python中是先7>5为True,然后5>2为True,最后用两个True作与,即True and True为True,所以结果为True
js中是先7>5为true,再进行true>2的比较,因为true为1,即1>2为false,所以结果为false
7,with
test.html文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{% with list1.0 as l %}
{
{ l }}
{
{ l }}
{
{ l }}
{% endwith %}
<br>
{% with l=list1.2 %} {# 等号两边不能加空格,否则汇报错 #}
{
{ l }}
{
{ l }}
{
{ l }}
{% endwith %}
body>
html>
csrf_token 是为了防止csrf(跨站请求伪造),更通俗的讲:就是防止黑客盗用你存在网站(cookie)上的账户密码和信息
在templates下新建form.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<input type="text">
<button>提交</button>
</form>
</body>
</html>
运行后点击提交按钮会报错
这是django的一种安全机制,加上csrf_token就可以去掉大黄页
form.html文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<form action="" method="post">
{% csrf_token %}
<input type="text">
<button>提交button>
form>
body>
html>
这次再提交就没问题了