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> %}`










网友评论