1.MVC与MTV:
两个Web框架MVC MTV
MVC
Mobel View Controller
数据库 模板文件 业务处理
MTV
Moble Template View
数据库 模板文件 业务处理
Django是一个基于MTV的框架
2.安装Django
pip3 install django
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts
3.创建Django工程
django-admin startproject mysite 【工程名称】
mysite
- mysite # 对整个程序进行配置
- init
- settings # 配置文件
- url # URL对应关系
- wsgi # 一套WSGI规范 本质是依据规则创建一个Socket
- manage.py #管理django程序:
- python manage.py
- python manage.py startapp xx
- python manage.py makemigrations
- python manage.py migrate
4.运行Django功能
python manage.py runsever 127.0.0.1:port
5.创建app
以chouti为例子
-chouti
-配置
-主站 app
-后台管理 app
创建app
python manage.py startapp cmdb
python manage.py startapp openstack
python manage.py startapp …(可以创建很多)
6.app简介
app目录:
migrations #数据修改表结构
admin #Django为我们提供的后台管理
app #配置当前app
models #ORM,写指定的类,通过命令就可以创建数据库结构
tests #单元测试
views #业务逻辑代码
from django.shortcuts import render
f = open('templates/login.html','r',encoding='utf-8')
data = f.read()
f.close()
上述三行代码 = render(request,'login.html')
7.新建Django
①配置模板的路径 即templates的路径
settings->’DIRS’->[os.path.join(BASE_DIR,’templates’)]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
②配置静态目录static
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
<link rel="stylesheet" href="/static/commons.css"/> /static
<script src="/static/jquery.min.js"></script> /static
8.CSRF
CSRF:跨站请求伪造
settings中先找到middleware 暂时先注释这句话csrf
注意:
urls里边的
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^home', views.home),
如果有斜杠r’^login/’则在login.html中action=”/login/”也有斜杠
如果没有斜杠r’^home’则在login.html中action=”/home”也没有斜杠
要注意这个对应关系,否则会出现403错误
9.写代码
①定义路由规则
在url.py中写
“login” –> 函数名 不带括号
②定义试图函数
app下views.py
def fun(request):
# request.method GET/POST
# request.GET.get('',None) 获取请求发来的数据
# request.POST.get('',None)
#return HttpResponse('字符串')
#return render(request,'Http模板的路径')
#return redirect('/只能填URL') #redirect重定向
③模板渲染
Django中有特殊的模板语言{{}}
def func(request):
return render(request,'index.html',{'current_user':sms})
index.html
<html>
<body>
<div>{{current_user}}</div> {{}}是一个特殊的标记可以替换sms
</body>
</html>
==>显示出来的样式,生成的sms的字符串
<html>
<body>
<div>sms</div> {{}}是一个特殊的标记可以替换sms
</body>
</html>
For循环
def func(request):
return render(request,'index.html',{'current_user':sms},
'user_list':['alex','erric'])
<html>
<body>
<div>{{current_user}}</div>
<ul>
{% for row in user_list %}
<li>{{row}}</li>
{% endfor %}
</ul>
</body>
</html>
索引
def func(request):
return render(request,'index.html',{'current_user':sms},
'user_list':['alex','erric'],
'user_dict':{'k1':'v1','k2':'v2'})
<html>
<body>
<div>{{current_user}}</div>
<a>{{ user_list.0 }}</a>
<a>{{ user_list.1 }}</a>
<a>{{ user_dict.k1 }}</a>
<a>{{ user_dict.k2 }}</a>
</body>
</html>
条件
def func(request):
return render(request,'index.html',
{'current_user':sms},
'age': 18,
'user_list':['alex','erric'],
'user_dict':{'k1':'v1','k2':'v2'})
<html>
<body>
<div>{{current_user}}</div>
<a>{{ user_list.0 }}</a>
<a>{{ user_list.1 }}</a>
<a>{{ user_dict.k1 }}</a>
<a>{{ user_dict.k2 }}</a>
{% if age %}
<a>有年龄</a>
{% if age > 16 %}
<a>老男人</a>
{% else %}
<a>小鲜肉</a>
{% endif %}
{% else %}
<a>无年龄</a>
{% endif %}
</body>
</html>