Django

简述python三大主流web框架

"""
django
大而全,类似于航空母舰
但是有时候过于笨重
flask
小而精,类似于游骑兵(单行代码就可以起一个flask服务)
第三方组件很多,但是有时候也会受限于第三方
tornado
异步非阻塞
速度非常快 SANIC
FASTAPI
...
"""

WSGI,ASGI跟wsgiref和uwsgi是什么关系

WSGI、ASGI是协议,ASGI基于WSGI
wsgiref和uwsgi是实现该协议的功能模块

简述无名有名分组

将匹配到的内容按位置参数传递到视图函数中
将匹配到的内容按关键字参数传到到试图函数中

简述反向解析以及名称空间

反向解析(本质)就是指通过一些方法,得到一个结果,该结果可以访问到对应的url并触发视图函数的运行
名称空间就是解决多个app下出现相同的别名,反向解析不会自动识别应用的前缀 反向解析的应用场景,是因为在软件开发初期,url地址的路径设计可能并不完美,后期需要进行调整,如果项目中很多地方使用了该路径,一旦该路径发生变化,就意味着所有使用该路径的地方都需要进行修改,这是一个非常繁琐的操作。
别名不能出现冲突!!!
# 别名如果发生冲突,未声明命名空间时,不同app下如果有相同的路由别名,反向解析会解析到最下面的app,会发生覆盖

MTV与MVC模型

# MTV:Django号称是MTV模型,其实是借鉴了MVC设计模式
Model:数据存储层,处理所有数据相关的业务,和数据库进行交互,并提供数据的增删改查;
Template:模板层(也叫表现层)具体来处理页面的显示;
View:业务逻辑层,处理具体的业务逻辑,它的作用是连通Model 层和 Template 。
# MVC:其实django本质也是MVC
Modle 代表数据存储层,是对数据表的定义和数据的增删改查;
View 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;
Controller 代表控制层,负责根据从 View 层输入的指令来检索 Model 层的数据,并在该层编写代码产生结果并输出。 MTV 是 MVC 的一种细化,将原来 MVC 中的 V 层拿出来进行分离,视图的显示与如何显示交给 Template 层,而 View 层更专注于实现业务逻辑。
其实在 Django 是有 Controller 层的,只不过它由框架本身来实现,所以我们不用关心它。Django 更关注于M、T 和 V。 # vue框架:MVVM模型

FBV和CBV的区别

FBV与CBV在路由匹配上本质是一样的,都是路由对应函数的内存地址
CBV特点:能够直接根据请求方式的不同自动匹配到对应的方法执行

简述CBV流程

特点:能够根据请求方式的不同自动匹配触发对应的方法执行
CBV本质上也是FBV
自定义类调用并执行View中的as_view方法,View类中维护了一个列表,列表中存有8中请求方式,
as_view函数返回一个view函数,view函数返回一个dispatch函数,
dispatch函数中将传入的请求方式变小写,通过反射去列表中查找是否有对应的请求方式,
有的话往后执行,没有就返回信息-不允许该请求方式

数据库查询优化

# only与defer
# select_related与prefetch_related """
**queryset才有惰性查询**
orm语句的特点:
惰性查询
如果你仅仅只是书写了orm语句 在后面根本没有用到该语句所查询出来的结果
那么orm会自动识别 直接不执行
"""
# only与defer
"""
only
结果是一个列表套多个对象,这些对象默认只有only括号内的属性
但是也可以点击括号内没有的属性,点击括号内没有的属性需要额外的走数据库操作
defer
跟only刚好相反
对象里面唯独没有括号内指定的属性
""" # select_related与prefetch_related
"""
select_related内部的本质是联表操作 inner join
括号内只能放外键字段并且多对多不行
括号内可以放多个外键字段
select_related(外键字段1__外键字段2__外键字段3__...)
将联表之后的结果全部查询出来封装到对象里面
之后对象在点击表的字段的时候都无需再走数据库 prefetch_related内部本质是子查询
内部通过子查询的方式将多张的表数据也封装到对象中
这样用户在使用的时候也是感觉不出来的 select_related主要用于一对一,一对多。prefetch_related主要用于多对多,也可用于一对多
上述两种方式,在不同的场景下效率各有千秋
"""

Restful规范

https://www.cnblogs.com/hkwJsxl/p/16581564.html

Web服务器和Web应用程序的区别

Web应用程序主要是完成web应用的业务逻辑的处理,Web服务器则主要是应对外部请求的接收、响应和转发。
需要使用web服务器启动运行,web应用程序才能被用户访问到。
而django框架中,我们之所以只有一个web应用程序就跑起来了,是因为我们在终端执行了一个命令,
python manage.py runserver。这个命令启动了django框架中内置提供的测试web服务器。

请描述一个客户端请求从发起到返回的过程(用django来描述);

用户从浏览器发起一个请求,请求来了之后到wsgi解析封装数据,
然后<请求拦截中间件>(process_request),
接着通过url路由匹配,分发到视图,
有render的走中间件的process_view,
需要连接数据库的连接数据库,不需要连接数据库的<响应拦截中间件>(process_response),
最后wsgi打包数据直接响应给浏览器。

请问Django projectDjango app之间有什么区别和联系?

一个django项目可以有多个app,每个app处理不同的业务逻辑

请详细说明Django中间件处理请求的流程(各个处理函数的执行顺序)

django中间件中一共有五个方法:
process_request
process_response
process_view
process_exception
process_template_response
主要常用为前两个,当用户发起请求时,会从上到下依次经过每一个中间件,这个时候会触发process_request函数,如果函数返回None,则继续到view视图中,返回HttpResponse响应对象则直接从当前中间件的process_reponse函数返回,正常情况下,视图层处理完后,返回执行中间件process_response函数,最后返回给浏览器
process_view在process_request和process_response之间执行
process_exception在出错时执行
process_template_response在视图层中返回的对象有render方法时执行

请问django中如何进行路由分发操作?

在应用下创建一个urls.py,将关于该应用的逻辑处理放到url里面,然后在总路由下导入该应用的urls

get和filter操作出的结果集是什么数据类型, 有什么区别?

get取到的是模型类对象
filter取到的queryset集合 queryset集合可以包含多个模型类对象

create和save方法有什么区别?

save方法要分为两步,save才是最后操作数据库的语句
create直接操作数据库,一步到位

Django重点及面试题的更多相关文章

  1. Python学习---django重点之视图函数

    django重点之视图函数 http请求中产生两个核心对象: http请求:HttpRequest对象,由Django自己创建 http响应:HttpResponse对象,由开发自己创建,必须返回一个 ...

  2. Django路由系统---django重点之url映射分发

    django重点之url映射分发 在全局项目的urls.py中进行子项目的映射,然后在子项目中创建一个urls.py去处理自己项目中的请求,同时也实现了代码的解耦 添加路由分发的原则[全局urls.p ...

  3. Django路由系统---Django重点之url别名

    django重点之url别名[参数名必须是name,格式是name="XXX] 不论后台路径如何进行修改路径,前台访问的路径不变,永远是alias, 这样方便开发 前台根据 {{ url & ...

  4. Django路由系统---django重点之url命名分组

    django重点之url命名分组[参数无顺序要求]. settigs.py:增加STATICFILES_DIRS静态资源路径配置,名称为创建的文件夹名称 'DIRS': [os.path.join(B ...

  5. Django路由系统---django重点之url传递一个默认参数

    django重点之url传递一个默认参数 可以利用这个特性,让2个URL映射一个函数,但是返回2个不同的HTML url(r'default_param1', views.def_param,), u ...

  6. django重点url,视图函数,模板语言

    django重点url,视图函数,模板语言url 1.django重点url无命名分组:re_path() 2.url第一个参:url未命别名分组就不需要views中参数一定,若命别名(?P<y ...

  7. Django重点之url别名

    django重点之url别名[参数名必须是name,格式是name="XXX] 不论后台路径如何进行修改路径,前台访问的路径不变,永远是alias, 这样方便开发 前台根据 {{ url & ...

  8. Python学习---Django重点之静态资源配置

    [官网静态文件介绍] https://docs.djangoproject.com/en/1.10/howto/static-files/ # settings.py 配置静态资源文件 # STATI ...

  9. 巨蟒django之权限8:排序&&菜单展开权限归属

    1.权限控制的流程+表结构 内容回顾: wsgi:socket进行收发消息 中间件:(超级重点的面试题)在全局范围内控制django的输入和输出的一个钩子,处理输入和输出说白了就是处理请求和响应req ...

  10. Django路由系统---url无命名分组

    django重点之url无命名分组[参数有顺序要求] settigs.py:增加STATICFILES_DIRS静态资源路径配置,名称为创建的文件夹名称 'DIRS': [os.path.join(B ...

随机推荐

  1. hive数据导出到linux本地

    方法1(hive下执行):insert overwrite local directory 'Linux本地目录' row format delimited fields terminated by  ...

  2. Podman容器技术基础

    Podman容器技术基础 目录 Podman容器技术基础 简介 安装 基础命令 简介 Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用.Podman 提供与 Docker ...

  3. Linux系统安装宝塔面板教程

    # Linux系统宝塔安装教程 注意:安装宝塔面板的前提条件 首先要有一台服务器或者使用linux系统的虚拟机. 安装前请确保是[全新的机器].必须是没装过其它环境的新系统,如Apache/Nginx ...

  4. 齐博x1第三季《模板风格的制作》系列009-自定义区块代码

    本节来说明如何自定义区块代码,不再继承上层模板,实现个性模板 上一节因为我们继承了layout布局模版,所以我们自定义的代码就无效了 如果我们继承了上层模板,那么相当于我们复制了一份上层模板的结构,也 ...

  5. 学习ASP.NET Core Blazor编程系列九——服务器端校验

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  6. 下一代工具链「GitHub 热点速览 v.22.43」

    作为一个前端工程师,你这周被下一代的前端工具链 Turbo 刷屏了吗?不只是 Turbo 这个小工具,作为一个社区生产力工具,本周思否还开源了他们的问答系统 answer,能直接用上相关的技术标签也省 ...

  7. Django系列---开发二

    django.contrib.auth Django的用户验证框架,可以快速实现用户信息验证.登录.登出等用户操作 from django.contrib.auth import authentica ...

  8. uniapp之uni-starter小程序多端研发框架搭建与项目实践

    随着移动互联网的飞速发展,无数移动APP琳琅满目:在移动App的发展的基础上,衍生了小程序.轻应用技术,它随时可用,但又无需安装卸载.小程序是一种不需要下载安装即可使用的应用,它实现了应用" ...

  9. 达梦-DBLINK数据库链接

    aliases: [达梦 DBlink] tags: [数据库,DM,Blog] link: date: 2022-09-06 说明:DM-Oracle指的是在DM中创建链接至Oracle的Dblin ...

  10. 2022春每日一题:Day 13

    题目:后缀排序 什么是后缀数组?他主要包含两个数组:sa和rk. 其中sa[i]表示将字符串后缀排序后第i小的编号,rk[i]表示后缀i的排名. 显然sa[rk[i]]=i,rk[sa[i]]=i. ...