Django易混淆问题

1、Django本身提供了runserver 为什么不能用来 部署

runserver 方法是调试 Django 时经常用到的运行方式,它使用 Django 自带的  WSGI Server 运行,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。  

    uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。注意uwsgi 是一种通信协议,而 uWSGI 是实现 uwsgi 协议和 WSGI 协议的 Web 服务器。
    uWSGI 具有超快的性能、低内存占用和多 app 管理等优点,并且搭配着 Nginx  就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
2、WSGI和uWSGI和uwsgi的区别
  • WSGI
WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),它不是服务器、python模块、框架、API或者任何软件,只是一种描述web服务器(如nginx,uWSGI等服务器)如何与web应用程序(如用Django、Flask框架写的程序)通信的规范。
server和application的规范在PEP3333中有具体描述,要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Django。
  • uWSGI
    uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。
  • uwsgi
  与WSGI一样,是uWSGI服务器的独占通信协议,用于定义传输信息的类型(type of information)。每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi【FCGI:fast common gateway interface 快速通用网关接口协议的10倍快。
3、Django中如何加载初始化数据
Django在创建对象时在调用
save()方法后,ORM框架会把对象的属性转换为写入到数据库中,实现对数据库的初始化;通过操作对象,查询数据库,将查询集返回给视图函数,通过模板语言展现在前端页面
4、Django下的内建缓存机制
Django根据设置的缓存方式,浏览器第一次请求时,cache会缓存单个变量或整个网页等内容到硬盘或者内存中,同时设置response头部,当浏览器再次发起请求时,附带f-Modified-Since请求时间到Django,Django 发现f-Modified-Since会先去参数之后,会与缓存中的过期时间相比较,如果缓存时间比较新,则会重新请求数据,并缓存起来然后返回response给客户端,如果缓存没有过期,则直接从缓存中提取数据,返回给response给客户端。
5、什么是CSRF及防范规范
  • 启用中间件
  • post请求
  • 验证码
  • 表单中添加{%csrf_token%}标签

6、Web框架的本质是什么


本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。

7、select_related与prefetch_related

在Django中,所有的Queryset都是惰性的,意思是当创建一个查询集的时候,并没有跟数据库发生任何交互。因此我们可以对查询集进行级联的filter等操作,只有在访问Queryset的内容的时候,Django才会真正进行数据库的访问。而多频率、复杂的数据库查询往往是性能问题最大的根源。

    不过我们实际开发中,往往需要访问到外键对象的其他属性。如果按照默认的查询方式去遍历取值,那么会造成多次的数据库查询,效率可想而知。
    
    在查询对象集合的时候,把指定的外键对象也一并完整查询加载,避免后续的重复查询。

select_related适用于外键和多对一的关系查询;

prefetch_related适用于一对多或者多对多的查询。
8、values与values_set的区别
#values : 取字典的queryset
#values_list : 取元组的queryset
9、include
nclude路由转发
通常,我们会在每个app里,各自创建一个urls.py路由模块,然后从根路由出发,将app所属的url请求,全部转发到相应的urls.py模块中。
10、查询集(queryset)的两大特性;什么是惰性执行
  • 惰性执行、缓存 。  
  • 创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用

11、django中如何写原生sql

列举django orm中三种能写sql语句的方法

使用extra:查询人民邮电出版社出版并且价格大于50元的书籍
Book.objects.filter(publisher__name='人民邮电出版社').extra(where=['price>50']) 
使用raw
books=Book.objects.raw('select * from hello_book')  
for book in books:  
   print book  
自定义sql
from django.db import connection  
  
cursor = connection.cursor()  
cursor.execute("insert into hello_author(name) VALUES ('郭敬明')")  
cursor.execute("update hello_author set name='韩寒' WHERE name='郭敬明'")  
cursor.execute("delete from hello_author where name='韩寒'")  
cursor.execute("select * from hello_author")  
cursor.fetchone()  
cursor.fetchall() 
12、ORM
ORM是“对象-关系-映射”的简称。
MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动
 13、FBV与CBV
FBV(function base views)就是在视图函面使用函数处理请求
CBV(class base views)就是在视图里面使用类处理请求
14、Django的请求生命周期
一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。
#1.wsgi,请求封装后交给web框架 (Flask、Django)     
#2.中间件,对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session - 
#3.路由匹配 根据浏览器发送的不同url去匹配不同的视图函数    
#4.视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染 - 
#5.中间件,对响应的数据进行处理。 
#6.wsgi,将响应的内容发送给浏览器。
14、表单坑

表单坑

上传图片和文件时,模板中form一定加enctype="multipart/form-data“属性, 同时视图中别忘了加request.FILES, 如form =UploadForm(request.POST, request.FILES)。

如果你在forms.py里通过clean方法自定义表单验证,那么视图中请用form.cleaned_data.get('field_name')获取验证过的数据,而不是直接使用request.POST['fileld_name']获取表单提取来的数据, 否则表单不会进行验证,那么你的clean方法也白定义了。小编我曾被这个坑怕了。

另外的你的模板里的form加{% csrf %}了吗?

15、django解决跨域请求的问题

解决方案:添加中间件,安装django-cors-headers 
配置settings.py文件,添加 
MIDDLEWARE_CLASSES = ( 
… 
‘corsheaders.middleware.CorsMiddleware’, 
‘django.middleware.common.CommonMiddleware’, # 注意顺序 
… 

#跨域增加忽略 
CORS_ALLOW_CREDENTIALS = True 
CORS_ORIGIN_ALLOW_ALL = True 
CORS_ORIGIN_WHITELIST = ( 
‘*’ 

)

心语:不要被眼前的困难给打倒,有可能是自身的积累不足和对基础的认识有欠缺;人生不要太乐观,因为放松确实容易误事,不是提倡悲观;保守沉稳方为大道。

posted @ 2019-03-10 23:08  ice_sweet  阅读(299)  评论(0编辑  收藏  举报