• Python全栈的知识点(4)


    1.MVC     
        Model       View       Controller
        模型      视图        控制器
        Django  MTV
        Model    Template       View
        模型     模板文件      业务处理
    
    2.web框架的本质:
        socket服务端与浏览器的通信
            1. socket服务端功能划分:
                a. 负责与浏览器收发消息(socket通信)  --> wsgiref/uWsgi/gunicorn...
                
                b. 根据用户访问不同的路径执行不同的函数
                
                c. 从HTML读取出内容,并且完成字符串的替换  --> jinja2(模板语言)
                
            2. Python中 Web框架的分类:
                
                1. 按上面三个功能划分:
                    1. 框架自带a,b,c                 --> Tornado
                    2. 框架自带b和c,使用第三方的a    --> Django
                    3. 框架自带b,使用第三方的a和c    --> Flask
                2. 按另一个维度来划分:
                    1. Django   --> 大而全(你做一个网站能用到的它都有)
                    2. 其他     --> Flask 轻量级
    
    3. Django请求生命周期?
        客户端发送请求,wsgi(socket)接受请求并处理请求初步封装,在进入Django
        进行二次封装,在经过中间件做效验和认证,比如session和csrf_token处理,由url分发请求,
        到相应视图进行业务逻辑处理,可能涉及到:ORM,和templates=》渲染,然后再经过url到中间件,
        中间件返回给wsgi,到wsgi将相应的内容返还给浏览器
    
    4. 什么是ORM?
            ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间做一个映射
            ORM优缺点:
                    优点:摆脱复杂的SQL操作,适应快速开发,让数据结果变得简单,数据库迁移成本更低
                    缺点:性能较差,不适用于大型应用,复杂的SQL操作还需要通过SQL语句实现
    
    5. orm操作
        - select_related,连表操作,相当于主动做join
        - prefeth_related,多次单表操作,先查询想要的数据,然后构造条件,如:id=[1,2,3],再次查询其他表根据id做条件。
            - only      仅仅查看列出的
            - defer     排除列出的
            - F         专门取对象中某列值的操作
            - Q         用于构造复杂查询条件
            - models.User.objects.using("db1").all()    选择链接的数据库
            - 通过ORM写偏原生SQL:
                - extra
                - raw    
                - 原生SQL
    
    6. Cookie是什么
        保存在浏览器端的键值对,cookie不是很安全,别人可以分析存放在本地的cookie
        为什么要有Cookie?
            因为HTTP请求是无状态的
        Cookie的原理?
            服务器可以在返回响应的时候做在浏览器上写入键值对(Cookie)
            浏览器发送请求的时候会自动携带该网站保存在我浏览器的键值对(Cookie)    
    
    7.Session是什么
        Session保存在服务端的键值对,依赖与cookie,安全指数比cookie高
    
    8. 使用中间件做过什么?  在视图执行之前帮助我们定制一些操作(process_request, process_response)
        - 内置
            - csrf    用来效验的字符串,防止跨站攻击
            - session     “会话控制”,放在服务器的键值对
        - 自定义
            - 登录认证    不再需要在每个函数中添加装饰器
            - 权限          当用户登录时候获取当前用户所有权限并放入session,然后再次访问其他页面,
                    获取当前url并在session中进行匹配。成功(True),失败(False)
            - cors         跨域中间件,设置响应头,允许你的一些跨域操作.应用:本地开始前后端分离时使用。
    
    9. 为什么会有跨域?
        浏览器具有同源策略所有才出现跨域。
        同源策略:
            - 开放:src
            - 禁止:ajax
        解决跨域:
            - JSONP(动态创建script标签,先定义一个函数,服务端返回数据函数名加括号执行)
                            
                PS: jsonp只能发送GET请求
                    
            - cors,设置响应头
                - 简单请求
                - 复杂请求
                    - options请求做预检
                    - PUT/POST....
                        
        在django中解决方案:
            - 中间件中设置响应头,django中的一个第三方组件:cors
    
    10. 常见请求头
        - Content-Type     (请求体or响应体的类型)
        - User-Agent       (本机和浏览器信息)
        - referer       (可以做图片防盗链)
        - Host           (本机IP和域名,域名可以有多个)
        - cookies       (服务器保存在本地浏览器的键值对,配合session使用)
    
    11. 常见的请求体?
        Form表单提交:
        Ajax请求:
        补充:django中获取请求体
            - request.POST 
            - request.body 
    
    12. django组件:contenttype
        组件的作用:可以通过两个字段让表和N张表创建FK关系
    
    13. FBV和CBV是什么?以及优缺点。   (在本质上都是一样的,通过函数处理请求)
        CBV在指定的类上面加上装饰器或在此方法上面添加装饰器 @method_decorator,并继承view
        CBV更适合做接口,响应各种method
    
    14.django rest framework
           a.权限
            -写一个类并注册到权限类,在类的has_permission方法中编写权限逻辑
            -True     -False
           b.认证
            -写一个类并注册到认证类。在类的authticate方法中编写认证逻辑。
            -认证成功(user,auth)元组
            -raise AuthticateFaild(...)
            -None(匿名用户)
           c.访问频率限制
            -写一个类并注册到频率类,在类的allow_request/wait方法中编写pinlv逻辑
            -True    -False 如果返回False,执行wait
           d.序列化
            -对queryset序列化以及对请求数据格式效验
           e.路由
            -可以通过as_view传参数,根据请求方式不同执行相应的方法
            -可以在url中设置一个结尾,类似于:.json
           f.视图
            -帮助开发者提供了一些类,并在类中提供了多个方法供我们使用
           g.分页
            -对从数据库中获取到的数据进行分页处理: SQL-> limit offset
            -1.限制页数    -2.记录当前页最大ID、最小ID
            -3种分页:
               -根据页码:http://www.baidu.com/api/v1/student/?page=1&size=10
               -根据索引:http://www.baidu.com/api/v1/student/?offset=1&limit=10  游标位置
               -根据加密:http://www.baidu.com/api/v1/student/?page=erd8
           h.解析器
            -根据ContentType请求头解析出queryset和对象
           i.渲染器
            -根据url中传入的后缀,决定将数据如何渲染到页面上
           j.版本
            -在url中设置version参数,用户请求时传入参数。在request.version中获取,根据版本不同做不同操作
    
    14. restful规范
          a.根据method的不同,进行不同操作(GET/POST/PUT/DELETE/PATCH)
          b.面向资源编程(任何url都是一个资源,可以对资源进行增删改查)
          c.体现版本(bootstrap3,bootstrap4)
          d.体现是API
            https://luffycity.com/api/v1/salary
            https://api.luffycity.com/v2/salary(放前面会出现2次跨域请求)
          e.使用https(基于安全考虑)
          f.响应时设置状态码(200,300,400,500)
          g.条件
            https://luffycity.com/api/v1/salary?page=1&size=10   (url限制)
          h.返回值
             1.https://luffycity.com/api/v1/salary
            GET:[返回列表]
            POST:[返回新增的数据]
             2.https://luffycity.com/api/v1/salary/1/
            GET:获取单条数据
            PUT:更新   
            PATCH:局部更新
            DELETE:删除
          i.返回错误信息{code:100001,error:"xx错误"}
          j.Hypermedia API(返回结果中提供链接)
            ret={code:1000,data:{id:1,name:"小强",depart_id:http://www.baidu.com}}
    
    15. django rest framework的作用?
        快速搭建基于restful规范的接口。
    
    16. django怎么弄并发的
            nginx的并发能力超高,单台并发能力过万(这个也不是绝对),在纯静态的web服务中更是突出其优越的地方,
        由于其底层使用epoll异步IO模型进行处理,使其深受欢迎
    17. Django的Form主要具有以下功能?
            生成HTMl标签,验证用户数据 is_vaild,HTML Form提交保留上次提交数据,初始化页面显示内容
    
    18. Django、Tornado、Flask各自的优势
             Django:Django无socket,django的目的是简便,快速开发,并遵循MVC设计,多个组件可以很方便的以“插件”形式服务于整个框架,
                         django有许多功能强大的第三方插件。django具有很强的可扩展性。
             Tornado:它是非阻塞式服务器,而且速度相当快,得力于其非阻塞的方式和对epoll的运用,Future对象,缺点:没有session,需要自定制
             Flask:是一个微型的web框架,配合SQLALchemy来使用,jinja2模板,werkzeug接口,另外它的上下文则较为耀眼                  
           
    19. django的template的注释是什么样子的
             单行:{#注释#}
             多行注释:{%comment%}
    
    20. 什么是wsgi?
        -web服务网关接口,实现该协议的模块(socket)
        -wsgiref(性能最差)
        -werkzurg
        -uwsig   Nginx
    
    21. uwsgi和wsgi
             wsgi:是web服务器网关接口,是pyhton应用程序或框架和web服务器之间的一种接口,其广泛使用的是django框架。
             uwsgi:是一个web服务器,它实现了wsgi协议,Nginx中HttpUwsgiModule的作用是与Uwsgi服务器进行交换
    
    22. 常见的状态码:
        - 200            服务器成功返回网页
        - 204         请求收到,但返回信息为空
        - 301/302         重定向/和永久重定向
        - 304         客户端已经执行了GET,但文件未变化
        - 400         错误请求,如语法错误
        - 403/404        无权限访问/找不到网页
        - 500            服务器产生内部错误
    
    23. 视图常见的继承
        from rest_framework.views import APIView # *  重写需要
        from rest_framework.generics import GenericAPIView
        from rest_framework.viewsets import GenericViewSet # as_view
        from rest_framework.viewsets import ModelViewSet # *  基本增删改查
    
    24. 你写的类都继承过哪儿些类?
        object
        View
        Views.APIView, GenericViewSet
        ViewSetMixin,   GenericAPIView
        mixins.CreateModelMixin, mixins.RetrieveModelMixin,
        mixins.UpdateModelMixin, mixins.DestroyModelMixin,
        mixins.ListModelMixin,
    25. csrf存在的原因 - 原因1: - 需要浏览器+爬虫先访问登录页面,获取token,然后再携带token去访问。 - 原因2: - 两个tab打开的同时,其中一个tab诱导你对另外一个tab提交非法数据
  • 相关阅读:
    LeetCode. 476. Number Complement
    LeetCode 172.Factorial Trailing Zeroes
    原码,反码,补码笔记
    python3笔记
    django笔记(python web框架)
    mysql 8.0 主从复制配置
    centos 7系统安装mysql 8.0
    MobaXterm无法退格删除
    Oracle数据泵常用命令
    oracle查年度周末日期
  • 原文地址:https://www.cnblogs.com/Guishuzhe/p/9824933.html
Copyright © 2020-2023  润新知