MVC 架构
django-admin.py startproject blog
,创建一个项目
python manage.py startapp xxx
,创建一个应用
python manage.py makemigrations
,生成策略文件
python manage.py migrate
,执行策略文件中的策略
python manage.py runserver
,运行服务器
python manage.py createsuperuser
,创建管理员账号
设置
- BASE_DIR
当前文件setting.py
的绝对路径的上层目录的上层目录,也就是项目的根目录
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- DEBUG
当设置DEBUG = True
,浏览页面出错时,会暴露内部的代码,所以如果在生产环境中,需要关闭
- INSTALLED_APPS
安装的应用,有一些是 django 自带的,当我们使用python manage.py startapp
创建自定义应用后,需要在这里添加,并生成策略文件,执行策略。
- MIDDLEWARE_CLASSES
WSGI
中的中间件,便于扩展、修改、替换。可以在接收请求、发送响应的过程中进行额外的处理。
- ROOT_URLCONF
根URL配置,当 django 收到请求时,由根URL配置对用户访问的URL进行正则表达式的模式匹配,从而将request
传递给指定应用的指定页面,或将URL剩下的部分交给应用的URL配置文件进一步匹配处理。
- TEMPLATES
页面模板相关配置,包括模板所在目录(用os.path.join,连接BASE_DIR
和"template"
),默认的上下文处理器,后端
APP_DIRS
设置为True
, Django 自动在每个应用包中寻找一个templates/
子目录,用作后备
- DATABASES
用于与数据库对接,引擎、数据库名称、用户名、密码等
- LANGUAGE_CODE
语言
- TIME_ZONE
时区
- STATIC_URL
静态文件,例如:CSS、图像、javascript 等文件所在的目录
与数据库对接
资料
apps
python manage.py startapp xxx
,创建应用
需要在setting.py
中INSTALLED_APPS
添加
python manage.py makemigrations
,生成策略文件
python manage.py migrate
,执行策略文件中的策略
模型
MVC 中的 M,与数据库直接交互
打开应用中的models.py
from django.db import models
用继承models.Model
的类表示每一个模型
定义储存于数据库的字段、字段的数据类型、可选项
官网资料
管理后台
应用中的admin.py
文件
导入当前应用中models.py
定义的模块,对应用中的数据进行管理
from .models import SignUp # 导入模型
admin.site.register(SignUp) # 注册模型
class SignUpAdmin(admin.ModelAdmin):
,通过继承 admin.ModelAdmin
的类定义字段显示形式
admin.site.register(SignUp, SignUpAdmin)
,第一个参数为模型名称,第二个参数为模型的形式
-
fields
简单定义对象内字段顺序 -
fieldsets
变量,分标题、标题内顺序、标题内容展现形式 -
inlines
,模型内联显示。-
admin.StackedInline
,内联的堆叠显示 -
admin.TabularInline
,内联的表格显示,可以显示更多条目,更多字段
-
-
list_display
,自定义显示的字段,模型中定义的变量或方法 -
list_filter
过滤器 -
search_fields
搜索框
资料
访问http://127.0.0.1:8000/admin/
,用创建的管理员账号登陆管理后台
视图
MVC 中的 V
打开应用中的views.py
导入模型
函数
每个视图是一个函数,接受一个request
作为参数
使用request
中的POST
放入模型,创建一个实例
根据request
中的内容,进行查询、修改、保存、删除等操作
.objects.filter
,查询数据
.save(commit=False)
,创建,但不保存新的实例
.save()
更新有修改的字段
get_object_or_404()
函数,将 django 模块作为第一个参数,还有任意数量的关键字参数。如果对象存在,返回对象,如果对象不存在,报出Http404
错误。
get_or_create
,如果存在,返回,如果不存在,创建。
save
- 表格
表格
当使用请求中的数据和模型类
创建一个实例后
通过is_valid()
方法判断数据是否符合类中定义的字段的要求
.cleaned_data
方法可以获得经过清洗后,符合要求的字段的信息
clean-data
在一个forms.ModelForm
子类中的clean_
方法,使用表格的字段属性代替
,检查特定属性是否正确。可以覆盖进行重写。
- 返回结果页面
return HttpResponse
return render(请求,模板,上下文字典)
return HttpResponseRedirect
基于类的视图
模板
- 模板语言
django 模板语言的语法包括四个结构:
变量
变量通过{{
和}}
标记。
使用点运算符进行 字典查找,属性查找 和 列表索引查找。
My first name is {{ first_name }}. My last name is {{ last_name }}.
With a context of {'first_name': 'John', 'last_name': 'Doe'}, this template renders to:
My first name is John. My last name is Doe.
{{ my_dict.key }}
{{ my_object.attribute }}
{{ my_list.0 }}
标签
一个标签可以输出内容,作为一个内容控制结构等等。一个if
语句或一个for
循环,从数据库抓取内容,甚至能够访问其他模板的标签。
标签用{%
和%}
标记。
{% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}
{% for choice in question.choice_set.all %}
过滤
过滤器 转换\翻译 变量的值 和 标记参数。
{{ django|title }}
将django
内容转为标题格式,即首字母大写
{'django': 'the web framework for perfectionists with deadlines'}
The Web Framework For Perfectionists With Deadlines
有些过滤器有一个大纲
{{ my_date|date:"Y-m-d" }}
注释
{# this won't be rendered #}
{% comment %} 、 {% endcomment %}
提供多行注释
{% comment "Optional note" %}
Commented out text with {{ create_date|date:"c" }}
{% endcomment %}
模板语言
- 模板系统
模板有继承功能
include
将一个模板完整放入另一个模板
保存一个navbar.html
模板到template
在base.html
的body
中添加{% include 'navbar.html' %}
,{% include 'navbar.html' %}
语句会被navbar.html
的内容替换
block
允许我们用当前模板的部分内容替换另一个模板的部分内容,同时保留其余部分
也可以用于插入
如果当前模板中block为空,就默认使用替换的模板的内容
在视图指定的模板中,第一行添加{% extends "base.html" %}
在需要替换的部分,上下添加
{% block content %}
a
{% endblock %}
另一种方法:
保留母模板特定内容,并添加新内容
{% block content %}
{{ block.super }}
Hi
{% endblock %}
HTML
静态文件
资料
setting.py
中的
INSTALLED_APPS
有django.contrib.staticfiles
STATIC_URL = '/static/'
或者,使用STATICFILES_DIRS
存放多个目录,供 django 的静态文件查找器查找,必须都在根目录下
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static_in_pro", "our_static"),
"/home/polls.com/polls/static",
)
是项目根目录下的static_in_pro
目录下的our_static
目录
调用静态文件,在模板第一行使用一下命令
{% load staticfiles %}
会在setting.py
中的STATICFILES_DIRS
下查找这个指定的静态文件
收集静态文件,目录可以在项目根目录以外
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_in_env")
python manage.py collectstatic
URL
urls.py
中的urlpatterns
是url()
函数列表
url()
函数传递四个参数,两个必须:regex
、view
,两个可选:kwargs
、name
。在这一点上,值得了解这些参数是什么。
- regex
regex
这个术语是 正则表达式 常用的简写,是一个匹配字符串模式的语法,在本例中,是 URL 模式。
django 从第一个正则表达式开始,顺着列表向下,比较请求的URL与每一个正则表达式,直到找到一个匹配。
注意,这些正则表达式不会搜索 GET
和POST
参数 或 域名。例如,一个对于http://www.example.com/myapp/
的请求,URLconf
将查找myapp/
。对于http://www.example.com/myapp/?page=3
的请求,URLconf
也会查找myapp/
。
view
当 django 找到一个匹配的正则表达式,django 会调用指定的 视图函数,并将 HttpRequest 对象作为第一个参数 、 任何被正则表达式捕获
的值作为其他参数。如果正则表达式使用简单的捕获,值会通过位置参数传递;如果使用命名的参数,值通过关键字参数传递。我们会给一个这样的例子。kwargs
任何关键字参数都可以放入字典中传递给目标视图。在这个教程中,我们不会使用这个特性。name
命名你的 URL 让你能够明确地参考从其他地方来的 django 特殊模板。
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^contact/$', 'newsletter.views.contact', name='contact'),
url(r'^admin/', include(admin.site.urls)),
]