python面试(Django框架)

Web框架(Django)

1.django 中当一个用户登录 A 应用服务器(进入登录状态),然后下次请求被 nginx 代理到 B 应用服务器会出现什么影响?

如果用户在A应用服务器登陆的session数据没有共享到B应用服务器,那么之前的登录状态就没有了。

2.跨域请求问题django怎么解决的(原理)

  • 跨域
    当发起请求的页面地址和被请求的地址不是同源,那么这个请求就是跨域请求简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容。这显然是不安全的。为此,浏览器的鼻祖:网景(Netscape)公司提出了优秀的解决方案:著名的浏览器同源策略。现在所有支持JavaScript的浏览器都会使用这个策略。
  • 浏览器的 同源 策略:
    协议、主机ip 和 端口port 都相同的两个地址是同源地址,否则是非同源地址
跨域实现流程为:
  1. 浏览器会第一次先发送options请求询问后端是否允许跨域,后端查询白名单中是否有这两个域名
  2. 如过域名在白名单中则在响应结果中告知浏览器允许跨域
  3. 浏览器第二次发送post请求,携带用户登录数据到后端,完成登录验证操作
django怎么解决

使用 django-cors-headers 扩展:

  1. 安装
    pip install django-cors-headers
  2. 添加应用
INSTALLED_APPS = (
    ...
    # 添加 django-cors-headers 使其可以进行 cors 跨域
    'corsheaders',
    ...
)
  1. 中间件设置:
MIDDLEWARE = [
    ...
    # 添加 django-cors-headers 使其可以进行 cors 跨域
    'corsheaders.middleware.CorsMiddleware',
]
  1. 添加白名单
    在设置文件中添加:
# CORS跨域请求白名单设置
CORS_ORIGIN_WHITELIST = (
    'http://127.0.0.1:8080',
    'http://localhost:8080',
    'http://www.meiduo.site:8080',
)
CORS_ALLOW_CREDENTIALS = True  # 允许携带cookie
  • 凡是出现在白名单中的域名,都可以访问后端接口

  • CORS_ALLOW_CREDENTIALS 指明在跨域访问中后端是否支持对 cookie的操作.

给设置文件中的 ALLOWED_HOSTS 添加数据:

ALLOWED_HOSTS = ['api.meiduo.site', 
                 '127.0.0.1', 
                 'localhost', 
                 'www.meiduo.site']

3.请解释或描述一下Django的架构(框架模式)

对于Django框架遵循MVC设计,并且有一个专有名词:MVT
M全拼为Model,与MVC中的M功能相同,负责数据处理,内嵌了ORM框架
V全拼为View,与MVC中的C功能相同,接收HttpRequest,业务处理,返回HttpResponse
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html,内嵌了模板引擎

4.django对数据查询结果排序怎么做,降序怎么做,查询大于某个字段怎么做

排序使用order_by()
降序需要在排序字段名前加-
查询字段大于某个值:使用filter(字段名_gt=值)

5.说一下Django,MIDDLEWARES中间件的作用?

答:中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。

作用:

  • 修改请求,即传送到 view 中的 HttpRequest 对象。
  • 修改响应,即 view 返回的 HttpResponse 对象。

6.你对Django的认识?

Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。

  • Django内置的ORM跟框架内的其他模块耦合程度高。
什么是ORM

即Object-Relationl-Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
在这里插入图片描述

  • 应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利;理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛胚房做全新的装修。
  • Django的卖点是超高的开发效率,其性能扩展有限;采用Django的项目,在流量达到一定规模后,都需要对其进行重构,才能满足性能的要求。
  • Django适用的是中小型的网站,或者是作为大型网站快速实现产品雏形的工具。
  • Django模板的设计哲学是彻底的将代码、样式分离; Django从根本上杜绝在模板中进行编码、处理数据的可能。

7. Django重定向你是如何实现的?用的什么状态码?

使用HttpResponseRedirect
redirect和reverse
状态码:302,301

8.ngnix的正向代理与反向代理?

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理 正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

9. Tornado 的核是什么?

Tornado 的核心是 ioloop 和 iostream 这两个模块,前者提供了一个高效的 I/O 事件循环,后者则封装了 一个无阻塞的 socket 。通过向 ioloop 中添加网络 I/O 事件,利用无阻塞的 socket ,再搭配相应的回调 函数,便可达到梦寐以求的高效异步执行。

10.Django 本身提供了 runserver,为什么不能用来部署?

runserver 方法是调试 Django 时经常用到的运行方式,它使用 Django 自带的
WSGI Server 运行,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。
uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。注意 uwsgi 是一种通信协议,而 uWSGI 是实现 uwsgi 协议和 WSGI 协议的 Web 服务器。uWSGI 具有超快的性能、低内存占用和多 app 管理等优点,并且搭配着 Nginx
就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。

11.创建项目,创建应用的命令?

django-admin startproject 项目名称
python manage.py startapp app名称

12. 生成迁移文件?执行迁移?

python manage.py makemigrations
python manage.py migrate

13. 关系型数据库的关系包括那些类型?

ForeignKey:一对多,将字段定义在多的一端中
ManyToManyField:多对多,将字段定义在两端中
OneToOneField:一对一,将字段定义在任意一端中

14. 查询集返回列表的过滤器有哪些?

all():返回所有数据
filter():返回满足条件的数据
exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字
order_by():排序

15. 判断查询集中是否有数据?

exists():判断查询集中是否有数据,如果有则返回True,没有则返回False

16.查询集两大特性?惰性执行?

惰性执行、缓存 。
创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用

17.Django的生命周期

  1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端
    请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中.

  2. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配,
    一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了.

  3. 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端.

  4. 客户端浏览器接收到返回的数据,经过渲染后显示给用户.

(待更新。。。)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值