从零开始的Django learning
MTV MVC 本质上
MVC:
- 模型
负责业务对象与数据库的映射
- 视图
负责与用户的交互
- 控制器
负责转发请求,对请求进行处理
MTV:
- Model
负责业务对象与数据库的映射(ORM)
- Template
负责把页面展示给用户
- View
负责业务逻辑,并在适当时调用Model和Template
- Url
URl分发器,负责将一个个URl的页面请求分发给不同的View处理,View再调用对应的Model和Template
Django
用户业务操作逻辑:
在页面输入url,根据url匹配对应的View函数,然后函数去Model中取数据,Model从数据库中存取数据,然后将数据返回给View,View将要展示的数据返回给Template,
(https://img-blog.csdnimg.cn/20210207145434674.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5MDY4NjQ5,size_16,color_FFFFFF,t_70#pic_center)
用户通过浏览器向我们的服务器发起一个请求,这个请求会去访问视图函数:
- 如果不涉及数据调用,那么视图函数直接返回一个模板给用户
- 如果涉及到数据调用,那么View函数调用Model,模型去数据库查找元素,然后逐级返回
- View函数把返回的数据填充到Template空位中,最后返回网页给用户
创建Django项目
.创建项目
- 命令行操作:
django-admin startproject 项目名称
- pycharm
file ---> new project ---- 选择Django ---> 配置路径和项目名称 ---> 配置环境(默认用系统环境) ----> 点击create(完成创建)
.创建应用
-命令行操作:
python manage.py startapp 应用名
a.第一项配置: settings.py 中INSTALLED_APPS中加入应用名
-pycharm
file ---> new project ---- 选择Django ---> More Settings--->application name
.运行项目
-命令行操作:
python manage.py runserver
-pycharm
点击右上角的绿色三角按钮,如需更改配置信息,下拉选择edit configurations
项目开始
.URL---path 函数初识
path(route,view,kwargs=None,name=None)
-route: 路由,表示URL规则
-view: 与route匹配的对应View函数
-kwargs: 视图使用的字典类型的参数
-name: **用户反向获取URL**
注: Django 2.0中可以使用re_path函数兼容1.x版本的url()方法
for example:
from django.urls import include,re_path,path
urlpatterns = [
re_path(...,views.hello,name=hello),
path('hello/', views.hello),
url(r'^$', views.hello),
]
.View---视图函数初识
视图函数就是一个接受request请求,返回HttpResponse的python函数
for example:
from django.http import HttpResponse
def hello(request):
return HttpResponse("hello world")
.Template---模板初识
Django 模板中,变量引用使用 {{ 变量名}} 语句指令使用 {% 代码指令 %}
b.第二项配置: settings.py 中TEMPLATES-DIRS的值为os.path.join(BASE_DIR, 'templates')
BASE_DIR 代表manage.py文件所在目录
example:
-
context 字典中的键,对应相应Template中的变量 {{hello}}
1).view:{“HTML变量名”:“views变量名”}
2).变量过滤器: {{ 变量名 | 过滤器:可选参数 }}
3).if/else : {% if condition %}
… display
{% endif %}
4).for: {{{% for … %}
… display
{% endfor %}
5).include 标签: {% include %} 标签允许在模板中包含其它的模板的内容。
6).csrf_token 用于表单中 -
2.编写runoob的url
from django.urls import path
from . import views
urlpatterns = [
path('runoob/', views.runoob),
]
- 1.View中新增一个对象 runoob
from django.shortcuts import render
def runoob(request):
context = {}
context['hello'] = 'Hello World!'
return render(request, 'runoob.html', context)
静态文件配置—先得创建statics目录
c.第三项配置: settings.py文件最下方
STATIC_URL = '/static/' # 别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "statics"),
]
注:在模板中使用需要加入 {% load static %} 代码
子模版使用{% block 父名称%}