zoukankan      html  css  js  c++  java
  • 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 = ( 
    ‘*’ 

    )

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

  • 相关阅读:
    微软推送Win10致全球网络负担增大,中国网友表示毫无压力
    hdu4336Card Collector 概率dp+状态压缩
    利用JAVA反射机制实现调用私有方法
    【D3 API 中文手冊】
    Android线程池(二)——ThreadPoolExecutor及其拒绝策略RejectedExecutionHandler使用演示样例
    输入3个整数,按由小到大的顺序输出(使用指针)
    【直接拿来用のandroid公共代码模块解析与分享】の Notification和NotificationManager
    HDU 1533 Going Home(KM完美匹配)
    项目期复习:JS操作符,弹窗与调试,凝视,数据类型转换
    Oracle11gR2 Windows 7 64bit and PL/SQL Developer排错
  • 原文地址:https://www.cnblogs.com/sweet-ice/p/10507965.html
Copyright © 2011-2022 走看看