model
创建模型
- 引用导入django.models,每个模型类继承models.Model.
- 每个模型都是一个字段,类别常用有Charfield,Integer,Text,File等类型,
- 字段的其他属性,null允许为True储存空值,blank,choices,db_column数据库字段名称
- default,unique,
- verbose_name,Field第一个参数字符串可以表示,除非是关系字段
- error_messages错误信息字典,键值为null,invalid,…与错误信息匹配
- help_text
- primary_key主键,默认自动添加id,AutoField字段
- 字段类型Auto_Field,BooleanField,CharField,DateField,DataTimeField,TextField,URLField,
- FileField(upload_to属性默认None),ImageField,
- 关系字段ForeignKey多对一,on_delete=models.CASCADE增删属性,ManyToMany,OneToOne,
- 添加一个模型管理字段models.Manager(),默认值是models.objects
- 模型类中可以有一个Meta内部类.
- Index(fields=[索引依据]),db_table属性作为表的名称
- ordering数组作为默认排序,先后
- indexs作为索引列表
- verbose_name,对象的可读名称,单数
- label,Mete的只读属性,返回对象表示
模型方法
- Model的查询,引用all(),get(),filter(),order_by()可以返回切片队列
- save(),delete()
- 模型实例引用,创建对象@classmethod,或者添加自定义管理器
- Model.pk作为主键字段名称的别名
- __str__()方法,在创建模型时返回实例的名称
- 如果get()无法获得对象,返回Model.DoesNotExist异常
迁移migretion
- makemigrations
- migrate
- 迁移文件继承自django.db.migretions.Migration,包含dependencies依赖,operation列表
- 虚假迁移makegrations --fake yourapp_name,清空数据makegrations --empty yourapp_name_
views
URL调度
- urls.py中有一个urlpatterns变量,包含path()和re_path()方法,后者正则匹配
- path匹配第一个参数,
<str:pk>/
传递字符串参数,int传递整型参数, - re_path匹配第一个参数,
(?P<pk>value)/
传递pk=value - include(extra_patterns)引用额外的url
- 命名空间 app_name=yourapp-name
- url反转,模板中中使用url命名空间
- python中使用reverse()函数
- 模型实例中使用get_absolute_url()
views编写
- 时区设置setting.py中TIME_ZONE=Asia/Shanghai
- HttpResponse(“包含字符串可以是html文本”,status=200)
- Http404(“返回错误信息”)
- url映射到视图的函数第一个参数是request
- django.shortcuts.render(request,‘模板.html’,context=None),context是一个字典,可以通过键值对追加内容
- redirect()和HttpResponseRedirect(reverse(’’,args=(,)))返回重新临时定向
- get_object_or_404(yourModel-name,kargs),kargs指get()获取的参数,错误引发HTTP404
- request.method ==[‘POST’,‘GET’],视图方法建议大写
请求和相应对象
- HttpRequest对象请求对象,所有属性视为只读,HttpResponse对象返回对象
文件上传
- 表单建立forms.FileField属性,文件上传以request.FILES[‘file’]形式传给form.
- 文件常用属性name,path,url
- 文件存储基于FileSystemStorage类,location=MEDIA_ROOT默认
通用视图
- 基于类的视图具有as_view()方法,视图类通过get()或post()方法处理
- django.views.generic,包括ListView,DetailView,
- 对于ListView视图需要提供model或queryset数据来源,context_object_name为数据在模板中引用的名称,template模板.
- 对于DetailView视图可以从单个模型意外的数据,提供model或queryset(Model.objects的子集),get_context_date()利用继承超类添加额外信息,template模板.
- 两种通用视图均可有get_queryset(self)方法.
- 如需要执行额外的工作,如数据最后调用时间可以包装get_object(self)函数,或字段属性更新增加auto_new_add属性
模板层
- 语法:for语句使用{% for var in list %}语句{% endfor %},if语句可以使用else是可选的
- 过滤使用{% 语句|filter %}
- 对于for循环具有forloop对象,forloop.counter计数从1开始,forloop.first和forloop.last均是布尔值。可选包括{% empty %}语句,注释使用{# 单行注释 #}
- {% include ‘nav.html’ %}允许模板包含其他模板,{% extends ‘base.html’ %}模板继承
TEMPLATES{'DIRS':[os.path.join(BASE_DIR,'templates/')] },
对于最基础可以继承
表单
- django.forms包含Form类,modelForm类.表单类继承自这两类
- 表单中的字段对应模板中的input标签,一般表单与模型数据建立连接使用内部继承类Meta
- Meta类中model是对应数据模型,fields的值表示表单显示的内容用列表形式,如果是模型中全部字段使用魔法变量_all_
- 在模板层表单在form标签中使用{{form}}代替,前面不要忘记{% csrf_token %},不包含submit标签
- 视图层表单处理:
- 判断表单方法request.method==“POST”, 视图层form=自定义表单类(request.POST)
- 判断form是否可用,form.is_valid(),
- 若表单没有Meta类,使用var=form.get(方法)
- form.save()将表单数据传入对应模型,自动新建id添加记录.
- 表单提交后执行界面返回HttpResponseRedirect(reverse(‘新链接’,args=()))args是可选的.
- else提交不成功返回render(原空表单)
部署
-
setting中的DEBUG改成False.
-
分离开发者和生产者环境设置设置,导入socket模块检查是否是gethostname()==‘my‐laptop’
本机DEBUG=TEMPLATE_DEBUG=‘False’