学习django笔记2

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’

猜你喜欢

转载自blog.csdn.net/weixin_43333826/article/details/85306036