zoukankan      html  css  js  c++  java
  • 复习第三天

    1. Http协议?
            Http协议就是一个传输数据格式
            我原来学习django框架,从socket服务端开始学起。
            自己创造了一个socket服务器来充当:网站。
            浏览器当socket客户端。
            更清楚的明白到底http协议是什么?
                - 请求头 请求体
                - 响应头 响应体
            一次请求响应后,断开连接。
        2. 常见请求头
             - Content-Type ,  媒体类型信息
            - User-Agent,  用户信息
            - referer,可以做图片防盗链。
            - Host, 域名和端口号
            - cookies
        3. 常见的请求体?
            Form表单提交:
                POST /index http1.1 host:www.luffycity.com... username=alex&password=123&...
            Ajax请求:
                POST /index http1.1 host:www.luffycity.com... username=alex&password=123&...
                POST /index http1.1 host:www.luffycity.com... {“username”:"alex","password":123}
                
            补充:django中获取请求体
                - request.POST
                - request.body   (为反序列化的数据)
                
        4. django请求生命周期
            - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask、Django)
            - 中间件,帮助我们对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session
            - 路由匹配
            - 视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染
            - 中间件,对响应的数据进行处理。
            - wsgi,将响应的内容发送给浏览器。
            
        5. 中间件
            - 5个方法
            - 应用场景:
                - 登录认证,不再需要在每个函数中添加装饰器
                - 权限,当用户登录时候获取当前用户所有权限并放入session,然后再次访问其他页面,获取当前url并在session中进行匹配。如果没有匹配成功,则在中间件返回“无权访问”
                - 跨域,
                        - jsonp,动态创建一个script标签。
                        - cors,设置响应头
                        应用:本地开始前后端分离的时使用。
            
        6. ORM操作
            - only
            - defer
            - seleted_related
            - prefetch_related
        
            示例:
                class Depart(models.Model): 5个部门
                    title = models.CharField(...)

                class User(models.Model):   10个用户
                    name = models.CharField(...)
                    email = models.CharField(...)
                    dp = models.FK(Depart)

                1.以前的你:11次单表查询

                    result = User.objects.all()
                    for item in result:
                        print(item.name,item.dp.title)

                2. seleted_related,主动做连表查询(1次链表)

                    result = User.objects.all().seleted_related('dp')
                    for item in result:
                        print(item.name,item.dp.title)

                    问题:如果链表多,性能越来越差。

                3. prefetch_related:2次单表查询
                    # select * from user ;
                    # 通过python代码获取:dp_id = [1,2]
                    # select * from depart where id in dp_id
                    result = User.objects.all().prefetch_related('dp')
                    for item in result:
                        print(item.name,item.dp.title)

            
            赠送:
                数据量比较大,不会使用FK,允许出现数据冗余。
            
        7. django rest framework的作用?
            快速搭建基于restful规范的接口。
        
        8. 你理解的 restful 规范?
            restful是一个规范,规定API如何编写,通过他可以让我们api更加简洁可维护。
            如,最直观的:
                method:
                    - get
                    - post
                    - put
                    - delete
                
                原来都是url中设置的。
            除此之外:
                - api
                - 版本
                - 名词
                - 条件
                - 状态码
                - 返回值
                - 错误信息
                - hypermedia link
        
        9. django rest framework组件:
            
            - 访问频率控制原理:
                匿名:
                    1.1.1.1:[时间,时间,时间,时间,]
                登录:
                    user:[时间,时间,时间,时间,]
                
                默认将访问记录放在缓存中:redis/memcached
            - 序列化
                from rest_framework.serializers import Serializer

                class XX(Serializer):
                    pass
                ser =XX(queryset,many=True) # ListSerializer对象
                ser =XX(obj, many=False)    # XX对象
                    
            - 列表生成式
            
            - 根据字符串的形式,自动导入模块并使用反射找到模块中的类【参考:s9day108】。

    10.什么是面向过程面向函数和面向对象?

            面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

       面向对象的程序设计的核心是对象(上帝式思维), 将(具有相同特性的一类事物)的属性和方法封装到一个类中,然后实例化之后就是一个对象(具体的事物).

        面向对象的三大特性:

            1、封装 根据职责将属性和方法封装到一个抽象的类内   
            2、继承 主要是为了实现代码的重用,相同的代码不需要重复的编写 
            3、多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

    11. Django使用原生SQL的方法:(三种)

      一:extra:结果集修改器,一种提供额外查询参数的机制
      二:raw:执行原始sql并返回模型实例
      三:直接执行自定义Sql
    12. Django中ORM支持事物操作
      from django.db import transaction
      try:
        with transaction.atomic():
          sql语句
      except Exception as e:
        return HttpResponse("出现错误....")
  • 相关阅读:
    利用EZMorph复制bean
    JAVA中使用FTPClient上传下载
    戏说java web开发中的listener和filter
    FastCGI的并发处理
    XPATH学习总结
    [Linux] gdb crash之后,杀掉僵尸进程的办法
    JAVA反射使用手记
    在centos5下安装配置VNC
    开始FastCGI
    log4php配置文件实例
  • 原文地址:https://www.cnblogs.com/l-jie-n/p/9941786.html
Copyright © 2011-2022 走看看