mvc
model view control
django-admin startproject
在当前目录创建一个项目框架
python manage.py startapp appname
在当前目录创建一个app框架
因为缺少setuptools模块跳出ImportError,安装setupuptools解决。
常用正则表达式
.
匹配任意字符
[a-zA-Z]
匹配a-z不区分大小写
+
匹配一次或者多次
?
匹配零次或者一次
*
匹配零次或者多次
\d
匹配数字
[^a]
匹配不为a的字符
{1,3}
匹配之前表达式1-3次
关于模型
每个模型都上一个继承自django.db.models.Model
类的实例。
每一个类的属性表示数据库的字段。
字段通过Field类的实例表示,如下所示
from django.db import models #default
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
published_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
不同的Field实例表示该字段数据的类型,第一个可选参数是一个字符串用以人类可读,若不给就是实例的名字。
ForeignKey
表示每个Choice关联一个Question
python manage.py makemigrations polls
运行makemigrations说明已经创建了新的模型,并且将这个行为储存为一个迁移文件。
python manage.py sqlmigrate polls 0001
执行这条命令会返回迁移文件对应的数据库命令。
python manage.py check
用于检查项目中的模型是否有问题。
python manage.py migrate
创建模型所对应的表。
为每个模型定义一个__str__
方法,这样Question.objects.all()
返回的就是可以区别各个模型项的信息。
在管理页面中注册模型
在admin.py中通过admin.site.register(Question)
来注册相应的模型。
关于模板
setting.py
配置了context_prosessors
这上一个可调用函数的默认的元组,以request
对象作为参数,返回一个传给context
的字典。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(os.path.dirname(__file__),'templates').replace('\\','/')],
'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',
],
},
},
]
以上上1.10.2的默认配置
关于转义
django一般会帮你转义和html冲突的字符,以得到正确的显示,如果不希望进行转义,可以在通过管道符添添加一个safe
若希望对一个块区域转义是否,可以使用autoescape
标签,记得要关闭标签。
{% autoescape off %}
这里的不会被转义
{% autoescape on %}
这里的会被转义
{% endescape %}
{% endescape %}
在每个{% for %}
循环中有一个forloop
模板变量,这个变量有一些关于循环的信息。
forloop.counter
当前循环次数,第一次为1
forloop.counter0
当前循环次数,第一次为0
forloop.recounter
剩余循环次数,最后一次为1
forloop.recounter0
剩余循环次数,最后一次为0
forloop.first
如果循环是第一次执行,那么它被设置为True
forloop.last
如果循环是最后一次执行,那么它会被设置为True
forloop.parentloop
指向上一级循环的forloop
对象
forloop
只能在循环中使用。
{% ifequal %}
比较两个值,相等是显示{% ifequal %}
和 {% endifequal %}之间的内容,只有模板变量,字符串,证书和小数可以作为其参数。
{# 这是模板注释的用法 #}
,模板注释不能跨越多行,如果要多行注释,可以使用{% comment %}
{% endcomment %}
模板标签。
过滤器
{{ name|lower }}
模板过滤器用来在变量显示前修改它的值的一个简易方法,这里显示的内容是变量{{ name }}
被过滤器lower
处理后的结果,它的功能是转换为小写,过滤器可以嵌套使用。
,有些过滤器需要参数,参数使用方法如下:
{{ bio|truncatewords:'30' }}
这将显示变量{{ bio }}
的前30个词。
点击查看各种过滤器
{% include %}
该模板标签允许模板中可以包含其他模板的内容。
{% extends %}
集成一个基础模板。、
{% block %}
在子模板中使用这个标签可以覆盖基础模板中相应的标签,如果希望在基础模板的内容上添加内容,可以在子模板的{% block %}
中使用{{ block.super }}
关于setting.py
首先这里是官方数据库配置文档,遇到问题可以查阅。
部署的时候
DEBUG = False
ADMINS = [('John', 'john@example.com'), ('Mary', 'mary@example.com')]
INSTALLED_APPS
Django中激活的应用的名字都保存在这里,以下上1.10.1默认的配置。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
django.contrb.admin
这是管理站点的应用。
django.contrib.auth
这是认证系统应用。
django.contrib.contenttypes
用与内容类型的框架
django.contrib.sessions
关于会话的应用
django.contrib.messages
关于消息的应用
django.contrib.staticfiles
管理静态文件的应用
数据库
这里是ubuntu官方关于postgresql的用法
附录B 关于数据库 模型语法和字段类型
附录C 关于django中数据库API
django发送email
首先在setting.py内配置eamil相关信息。
send_email
参数
关于CSFR权限问题
关于views.py
django.http.HttpResponse
返回一个string,参数为string
django.http.HttpResponseRedirect
重定向到一个路由,参数为一个路由。
关于forms.py
django为每一个表单创建了一个form类
django.forms.Form()
实例方法
假设f是实例
f.is_bound
查看实例是否绑定数据
f.is_valid()
返回布尔值,是否合法
f.errors
字段和出错消息映射表
f[string].errors
单独字段的出错信息
f.cleaned_data
通过验证后,这个属性上一个提交数据的字典
在表单定义里定义一个clean_开头,字段名称结束的方法,是自定义的验证方法。
subject = forms.CharField()
email = forms.EmailField(required=False,label="your email address!")
message = forms.CharField(widget=forms.Textarea)```
`label`自定义字段在页面中显示的标签
#### 关于静态文件
每个应用文件夹下应有一个`static/appname/static/` 文件夹,静态文件在这里管理。
模板在`<head>`使用`{% load staticfiles %}`,然后在后面
`<link rel='stylesheet' type='text/css' href={% static 'appname/static/<staticfile> %}`