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', '[email protected]'), ('Mary', '[email protected]')]

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/` 文件夹,静态文件在这里管理。
模板在``使用`{% load staticfiles %}`,然后在后面
`  %}`

你可能感兴趣的:(Django学习笔记)