Django学习笔记

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>  %}`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,601评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,367评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,249评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,539评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,967评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,929评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,098评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,825评论 0 207
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,609评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,796评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,282评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,603评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,277评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,159评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,959评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,079评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,874评论 2 277

推荐阅读更多精彩内容