首页 > 其他分享 >django

django

时间:2023-07-17 22:12:47浏览次数:63  
标签:定义 django objects Template Model 查询 View

目录

1、总体结构

Django是MTV结构,即:Model, Template, View

  • Model:定义数据的存储格式,并且提供了数据库访问的API。
  • View:定义那些数据被显示,是业务逻辑处理模块。
  • Template:定义数据如何被显示。

Django工程包含工程的配置、及多个APP,每个APP完成相对独立的功能。在设计中,要尽量保持每个APP的独立性,以做到APP是即插即用。

image-20230708094817905

image-20230717215611382

2、交互关系

image-20230717215637888

(1)用户通过浏览器向我们的服务器发起一个请求(request),这个请求会URL通过URLConf模块映射到View函数,将HttpRequest对象作为参数传入;

(2)a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。

​ b.如果涉及到数据调用,那么视图函数通过Model访问数据库,进行业务逻辑运算得到输出数据,然后逐级返回。

(3)视图函数把返回的数据填充到模板(Template)中空格,加载Template,根据输出数据生成页面,将HttpResponse对象返回

3、Model

  • 一个类对应于数据库中的表(Table),类属性对应于表的字段(Field)。
  • 从 django.db.models.Model 派生,支持继承。
  • 要使用一个APP时,需要将该APP的Model添加到工程的 settings.py INSTALLED_APPS 中。
(1)Field的定义
  • 字段的类型:指定数据库表字段的类型,表单默认的Widget,以及校验条件。
  • 字段选项:null, blank, choices, default, unique, primary_key。
  • 表之间的关系:one-to-one, many-to-many, many-to-one。
(2)Model中可以定义Method,实现下列功能:
  • 添加定制的 "row-level" 功能;
  • override predefined methods;
  • 定义Model的Business Logic;
  • 定义Raw SQL;
(3)数据库表查询

使用QuerySet对象实现多种方式的查询,Model的objects属性返回QuerySet对象。

1)基本查询
  • all_entries = Entry.objects.all()
  • part_entries = Entry.objects.all()[:5]
  • one_entry = Entry.objects.get(pk=1)
2)使用过滤器查询
  • Entry.objects.filter(pub_date__year=2006)
  • Entry.objects.exclude(pub_date__gte=datetime.now())
3)字段(Field)查询
  • 该功能等价于SQL中的WHERE,可以对Field指定更细致的查询条件。
  • 通过Keyword参数,传递给QuerySet对象的get, filter, exclude方法。格式:field__lookuptype=value 。
  • 常用的lookuptype有:
    • exact
    • iexact
    • contains
    • startswith, endswith
Entry.objects.get(headline__exact="Man bites dog")
Entry.objects.get(headline__contains='Lennon')

QuerySet的特点

  • 多个过滤器可以组成链使用;
  • 每次查询返回的QuerySet对象是独立保存;
  • 使用了缓存机制;
  • 使用了延迟执行机制;

4、View

​ View代表一种应用, 返回被请求的页面。 View要实现两个功能:URL的分发处理,定义View函数。

(1)URL分发处理

​ 使用正则表达式定义 URL pattern,建立到View函数的映射关系。

1)环境配置

  • settings.ROOT_URLCONF:定义URL的配置文件位置;
  • settings.urlpatterns:定义URL patterns 到View函数的映射关系;

2)URLpattern 匹配的范围:

  • 不包含domain
  • 不包含GET, POST参数
  • 匹配后的参数作为字符串传入view function

3)从匹配结果到函数参数

  • 传送给View函数的第一个参数是HttpRequest对象,正则表达式匹配的内容作为第二个参数传入。
  • 可以使用Named groups,将匹配的部分作为keyword参数。
  • 格式:(?Ppattern)

4)避免重复定义的机制

  • view prefix:提取view function的公共前缀
  • Including other URLconf
(2)View函数

​ 接收Web请求,返回Web响应,基本的处理流程是

  1. 收到传入的HttpRequest参数;
  2. 从HttpRequest中获得输入数据;
  3. 进行数据处理,构造Context数据;
  4. 加载Template;
  5. 使用Context数据Render Template;
  6. 返回 HttpResponse;

1)相关的类

  • class HttpRequest:通过POST或GET属性访问传入的参数
  • class HttpResponse:主要派生类有 class HttpResponseRedirect,class HttpResponseNotFound
  • class UploadedFile
  • class QueryDict:multiple values for the same key

2)快捷函数

  • render
  • render_to_response
  • redirect
  • get_object_or_404
  • get_list_or_404

5、Template

​ Template用于描述数据的表现,不包含业务逻辑处理。Django不是简单的将Python语言嵌入到HTML代码中,而是定义了一套标记,用于实现对HTML中数据的控制。通过变量访问数据,通过TAG控制Template的处理逻辑。

(1)变量
  • 格式:{{ variable }}
(2)TAG
  • 格式:
  • 常用的有:for/if/block and extends
(3)过滤器功能
  • 格式:{{ name|lower }}
  • 例:{{ value|default:"nothing" }}
  • 常用内置的过滤器:default, length, striptags
(4)Template继承
  • 使用block/extend实现。
  • 在父模板中,使用block定义扩展点。
  • 在派生模板中,使用extend对扩展点进行重新定义。也可以引用父模板中的定义,使用{{ block.super }} 。

标签:定义,django,objects,Template,Model,查询,View
From: https://www.cnblogs.com/DQ-MINE/p/17561389.html

相关文章

  • Django+DRF+Vue 网页开发环境安装(windows/Linux)
    博客地址:https://www.cnblogs.com/zylyehuo/总览一、安装Djangopipinstalldjango==3.2二、安装MySQL驱动程序pipinstallpymysql三、安装DRFpipinstalldjangorestframework-ihttps://pypi.douban.com/simple四、安装Vue(一)脚本化引入<scriptsrc=......
  • 【12.0】Django框架之form组件
    【一】需求写一个注册功能获取用户名和密码,利用form表单提交数据在后端判断用户名和密码是否符合一定的条件用户名中不能包含啦啦啦密码不能少于三位如果符合条件需要你将提示信息展示到前端页面【二】form表单实现【1.0】点击提交按钮返回比对信息前端页面<f......
  • 【14.0】Django框架之CBV添加装饰器的三种方式
    【一】给类方法加装饰器指名道姓的装--放在方法上面路由path('login_view/',views.MyLogin.as_view()),需要导入一个模块fromdjango.utils.decoratorsimportmethod_decorator视图fromdjango.viewsimportViewfromdjango.utils.decoratorsimportmetho......
  • 【13.0】Django框架之Cookie和Session
    【一】Cookie与Session的发展史详解Cookie和Session是用来在Web应用程序中跟踪用户会话数据的两种常用技术。【1】Cookie的发展史:1994年,网景通信公司推出了第一个浏览器Cookie技术。Cookie是存储在用户计算机上的小型文本文件,用于跟踪用户在网站上的活动。初始版本的Cookie只......
  • django项目中分多个models.py创建table
    django项目每个app都默认有一个model.py文件。当app需要大量建立table,且需要分类时,能否建立多个model.py文件?。1、在app文件夹下创建一个models文件夹(myapp/models/):2、将app文件夹中models.py文件删除(也可以剪切到models文件夹中):3、models文件夹下新建__init__.py:4、......
  • 【6.0】Django框架之路由层
    【一】路由匹配#路由匹配path('test',views.test),path('testadd',views.testadd),无法跳转到testaddurl方法第一个参数是正则表达式只要第一个参数正则表达式能够匹配到内容,就会立刻停止匹配,执行视图函数#路由匹配path('test/',views.test),path('testadd......
  • 【9.0】Django框架之模型层
    【一】前言Django自带的sqlite3数据对日期格式不敏感,处理的时候容易出错【1】测试脚本测试脚本当我们只想要测试Django中的某一个py文件的内容时,我们可以不需要书写前后端交互的形式,而是直接写一个测试脚本即可测试环境的准备在测试文件中书写下面内容这内容其......
  • 【8.0】Django框架之模板层
    【一】模板语法的传值{{}}:变量相关{%%}:逻辑相关【1】数据准备路由#模板语法传值url(r'^index/',views.index),【2】基本数据类型(1)视图defindex(request):#模板语法可以传递的后端Python数据类型#整型a=123#浮点型b=11.11......
  • 【补充】Django自带的序列化组件
    【11.0补充】Django自带的序列化组件【一】准备数据fromdjango.dbimportmodels#Createyourmodelshere.classUser(models.Model):username=models.CharField(max_length=32,verbose_name="姓名")age=models.IntegerField(verbose_name="年龄")g......
  • 【二十三】Django框架(Rest Framework)之版本控制
    【一】为什么需要版本控制API版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据)。DRF提供了许多不同的版本控制方案。可能会有一些客户端因为某些原因不再维护了但是我们后端的接口还要不断的更新迭代这个时候通过版本控制返回不同的内容......