碎片一:safe过滤器
Django在默认情况下是不随便解析HTML代码的,主要是担心网站安全的问题。所以如果在django中的templates里写入html代码时,渲染出来的效果只会显示出这些html代码,如果需要浏览器渲染出html效果的话,需要使用safe过滤器。
safe过滤器可以将我们写入的html代码进行解析显示出来,例如获取到了一个变量post,post.body的赋值是一串html代码,在template的html文件中可以{ { post.body | safe}}就可以显示html效果。
同样css也是可以用safe过滤器进行解析。
碎片二:models.Model中常用的数据字段格式说明
字段格式 | 可以使用的参数 | 说明 |
BigIntegerField | 64位的大整数 | |
BooleanField | 希尔值,只有True/False两种 | |
CharField | max_length:指定可接受的字符串长度 | 用来存储较短数据的字符串,通常使用于单行的文字数据 |
DateField | auto_now:每次对象被存储时就自动加入当前日期 auto_now_add:只有在对象被创建时才加入当前日期 |
日期格式:可用于datetime.date |
DateTimeField | auto_now:每次对象被存储时就自动加入当前日期 auto_now_add:只有在对象被创建时才加入当前日期 |
日期时间格式,对应到datetime.datetime |
DecimalField | max_digits:可接受的最大位数 decimal_places:在所有位数中,小数占几个位数 |
定点小数数值数据,适用于Python的Decimal模块的实例 |
EmailField | max_length:最长字数 | 可接受电子邮件地址格式的字段 |
FloatField | 浮点数字段 | |
IntegerField | 整数字段,是通用性最高的整数格式 | |
PostiveIntegerField | 正整数字段 | |
SlugField | max_length:最大字符长度 | 和CharField一样,通常用来作为网址的一部分 |
TextField | 长文字格式,一般用在HTML窗体的Textarea输入项目中 | |
URLField | max_length:最大字符长度 | 和CharField一样,特别用来记录完整的URL网址 |
碎片三:models.Model各个字段常用的属性说明
字段选项 | 说明 |
null | 此字段是否接受存储空值 Null,默认值是False |
blank | 此字段是否接受存储空白内容,默认值是False |
choices | 以选项的方式(只有固定内容的数据可以选用)作为此字段的候选值 |
default | 输入此字段的默认值 |
help_text | 字段的求助信息 |
primary_key | 把此字段设置为数据表中的主键KEY,默认值为False |
unique | 设置此字段是否为唯一值,默认值为False |
from django.db import models
class NewTable(models.Model):
float_f=models.FloatField(null=True)
# choices选项的使用
class NewTable2(models.Model):
SIZES=(
('S','Small'),
('M','Medium'),
('L','Large'),
)
size=models.CharField(max_length=1,choices=SIZES)
碎片四:数据库在admin后台的显示
from django.contrib import admin
from .models import Bbsuser
from .models import Section
from .models import Bbspost
from .models import Comment
# Register your models here.
#设置后台显示内容
class BbsuserAdmin(admin.ModelAdmin):
'''bbs用户表'''
list_display = ('username','email','isadmin',)
class SectionAdmin(admin.ModelAdmin):
'''bbs版块表'''
list_display = ('secname','detail',)
class BbspostAdmin(admin.ModelAdmin):
'''bbs帖子表'''
list_display = ('postname','content','secid','uid',)
class CommentAdmin(admin.ModelAdmin):
'''bbs评论表'''
list_display = ('uid','comment','postid','pcid',)
#导入后台admin显示
admin.site.register(Bbsuser,BbsuserAdmin)
admin.site.register(Section,SectionAdmin)
admin.site.register(Bbspost,BbspostAdmin)
admin.site.register(Comment,CommentAdmin)
启动runserver服务,进入admin后台管理,可以看到对应数据库的设置的字段信息以及数据信息,同时也可以对数据库进行同步操作。
碎片五:Django 数据库操作常用的函数以及修饰词
函数名称或修饰词 | 说明 |
filter(数据表字段=需要查询的字段内容) | 返回符合指定条件的数据记录,实例:user.objects.filter(id=100) |
|
返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列,需要搜索的内容,例如user.object.values()显示所有的数据,如果values()中有字段值,就会显示该字段的值的字典 实例:user.objects.values()/user.objects.values('name') |
|
它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 实例:user.objects.values_list()/user.objects.values_list('name') |
exclude(数据表字段=需要查询的字段内容) | 返回不符合指定条件的数据记录 实例:user.objects.exclude(id=10) |
order_by() | 串接到返回数据记录之后,针对某一指定的字段进行排序,默认是从小到大排序,若想要从大到小排序,那么在指定的字段前加上负号“-”即可 66 实例:user.objects.all().order_by('datetime') |
all() | 返回所有的数据记录 实例:user.objects.all() |
get() | 获取指定符合条件的唯一元素,如果找不到或有一个以上符合条件,都会产生exception 实例:user.objects.get(id=1) |
|
对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。 实例:user.objects.all().order_by('datetime').reverse() |
|
从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。) |
|
返回数据库中匹配查询(Que、rySet)的对象数量。 实例:user.objects.all().count() |
first()/last() | 获取第一个和最后一个元素 实例:user.objects.all().first()/user.objects.all().last() |
aggregate() | 可以用来计算数据项的聚合函数 |
exists() | 用来检查是否存在某指令条件的记录,通常附加在filter()后面,返回true/false 实例:user.objects.exists() |
update() | 用来快速更新某些数据记录中的字段内容 |
delete() | 删除指定的记录 |
iexact | 不区分大写小的条件设置,用于filter=(数据表字段__iexact=需要查询的字段内容) |
contains/icontains | 设置条件为含有某一字符串就符合,相当于sql的like和not like,用于filter=(数据表字段__contains/icontains=需要查询的字段内容) |
in | 提供一个列表,只要符合列表中的任何一个值均可 |
gt/gte/lt/lte | 大于/大于等于/小于/小于等于,用于filter=(数据表字段__gt/gte/lt/lte=需要查询的字段内容) |
单表查询时双下划线的使用实例:
models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
models.Tb1.objects.filter(name__contains="ven") # 获取name字段包含"ven"的
models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
models.Tb1.objects.filter(id__range=[1, 3]) # id范围是1到3的,等价于SQL的bettwen and
类似的还有:startswith,istartswith, endswith, iendswith
date字段还可以:
models.Class.objects.filter(first_day__y