一、了解web框架
本质上就是一个socket,有两种常用的模式,MVC及MTV。
MVC
module | view | controller |
---|---|---|
数据库操作 | 模板文件 | 业务处理 |
MTV
module | template | view |
---|---|---|
数据库操作 | 模板文件 | 业务处理 |
Django就是一个基于MTV的web框架
二、Django初识
1、创建Django工程
切换到django目录下sbin,windows添加环境变量后可无需切换目录,mac无视直接敲命令就行
终端命令:
django-admin startproject [工程名称]
生成的文件夹对应的功能与作用
mysite
-mysite # 对整个程序进行配置
- init #
- settings # 配置文件
- url # url对应关系
- wsgi # 遵循wsgi规范,uwsgi+nginx
-manage.py # 管理Django
#一些命令:
- python manage.py
- python manage.py startapp xx
- python manage.py makemigrations
- python manage.py migrate
2、运行Django
python3 manage.py runserver 127.0.0.1:8001
3、django中的app
创建app,进入对应的工程目录下,执行命令
python manage.py startapp xx
app下的文件目录及作用
migrations #是数据库结构操作的记录
admin #django为我们提供的后台管理
apps #配置当前app
models #创建数据库表 ORM,写指定的类,通过命令可以创建数据库结构
tests #单元测试
views #业务逻辑代码
4、配置模板路径
在Django工程目录下的settings.py中
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',
],
},
},
5、配置静态目录
在settings.py中配置静态目录
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
三、Django生命周期概述
各个客户端通过向服务器发送请求,由路由系统匹配URL,匹配成功后分发给对应的视图函数处理,从数据库中获取数据,并渲染给html,再返回给客户端。
四、注意事项
1、设置(注释csrf)
在settings.py的middlerware中注释csrf
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware', #先注释掉
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
2、定义路由规则
在urls.py中定义路由规则,一个URL对应一个函数名
urlpatterns = [
path('login/',views.login),
]
7、定义视图函数
在app下的views.py中编写视图函数
def func(request):
#request.method POST/GET
#request.GET.get(“”,None)
#request.POST.get(“”,None)
#return HttpResponse(“字符串”)
#return render(request,”html file path”)
#return redirect(“url”) #只能是url,如果要填本地的url,前面需要加/
8、模板渲染
通过视图函数将模板语言中变量、列表、字典等数据类型进行渲染,实现数据传递
- {{变量名}}
def func(request):
return render(request,”index.html”,
{“current_user”:”alex”})
index.html
<html>
<body>
#将alex替换到该位置并生成字符串返回给用户
<div>{{current_user}}</div>
</body>
</html>
- for 循环
def func(request):
return render(request,”index.html”,{
“current_user”:”alex”,
“user_list”:[“yanzhuang”,”gu”],
“user_dict”:{“k1”:”v1”,”k2”:”v2”}
})
index.html
<html>
<body>
#将alex替换到该位置并生成字符串返回给用户
<div>{{current_user}}</div>
<ul>
{% for row in user _list%}
<li>{{row}}</li>
{% endfor %}
</ul>
<a>{{user_list.1}}</a> #取列表数据
<a>{{user_dict.k1}}</a> #取字典数据
</body>
</html>
- if 条件
def func(request):
return render(request,”index.html”,{
“current_user”:”alex”,
“age”:18
“user_list”:[“yanzhuang”,”gu”],
“user_dict”:{“k1”:”v1”,”k2”:”v2”}
})
index.html
<html>
<body>
#将alex替换到该位置并生成字符串返回给用户
<div>{{current_user}}</div>
<ul>
{% for row in user _list%}
<li>{{row}}</li>
{% endfor %}
</ul>
<a>{{user_list.1}}</a>
<a>{{user_dict.k1}}</a>
#if-else条件语句嵌套
{% if age %}
<a>有年龄</a>
{% if age > 16 %}
<a>老腊肉</a>
{% else %}
<a>小鲜肉</a>
{% endif %}
{% else %}
<a>无年龄</a>
{% endif %}
</body>
</html>