复习第三天

1. Http协议?
        Http协议就是一个传输数据格式
        我原来学习django框架,从socket服务端开始学起。
        自己创造了一个socket服务器来充当:网站。
        浏览器当socket客户端。
        更清楚的明白到底http协议是什么?
            - 请求头 请求体
            - 响应头 响应体
        一次请求响应后,断开连接。
    2. 常见请求头
         - Content-Type ,  媒体类型信息
        - User-Agent,  用户信息
        - referer,可以做图片防盗链。
        - Host, 域名和端口号
        - cookies
    3. 常见的请求体?
        Form表单提交:
            POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\nusername=alex&password=123&...
        Ajax请求:
            POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\nusername=alex&password=123&...
            POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\n{“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("出现错误....")

 

转载于:https://www.cnblogs.com/l-jie-n/p/9941786.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uos20专业版是linux哪个版本,WPS Office 2019 for Linux 专业版已与统一操作系统 UOS 完成适配...

统信软件近日发布消息称,办公软件 WPS Office 2019 for Linux 专业版已与统一操作系统 UOS 完成适配工作。对比 2016 版本,2019 版本总体性能有大幅提升。这不仅体现在整体的启动速度上,文字、表格和演示三个组件基础功能的性能同样得到了整体…

java学习(77):GUL下拉菜单框和滚动条

//下拉列表框和滚动条 //面向对象思想,面板,窗口的基础之上再加窗口 import java.awt.*; import javax.swing.*; public class test12 extends JFrame {JPanel mb1,mb2;JLabel bq1,bq2;//标签JComboBox xlk;//JList lb;//列表JScrollPane gd;//滚动publi…

Git 基本命令

1.git安装后设置《用户名》和《邮箱》;查看自身《用户名》和《邮箱》 //设置$ git config --global user.name "yangkang" $ git config --global user.email "kang.yangarvato.com" //查看 $ git config user.name yangkang $ git config user.email kang…

易语言执行linux脚本,初识易语言到编写SHELL生成器

下面开始实际的代码编写步骤。首先要先插入几个常量用来存放SHELL代码,点击插入按钮-选择常量(图15),右键选择插入新长文本常量(图16),常量名称改为一个方便易记的名字,最好是SHELL类型或者是SHELL的名字,然后双击常量…

java学习(78):GUL拆分窗口

//拆分窗口 //面向对象思想,面板,窗口的基础之上再加窗口 import java.awt.*; import javax.swing.*; public class test13 extends JFrame {JSplitPane cf;//分成左右两面JList lb;JLabel bq;public static void main(String[] args){test13 lx1new te…

对‘example_app_new’未定义的引用

将头文件添加到add-executable()中 cmake_minimum_required(VERSION 3.12) project(SGTK3application2 C)set(CMAKE_C_STANDARD 11)find_package(PkgConfig REQUIRED) pkg_check_modules(GTK3 REQUIRED gtk-3.0)include_directories(${GTK3_INCLUDE_DIRS}) link_directories(${…

java学习(79):GUL聊天窗口

//聊天窗口 //面向对象思想,面板,窗口的基础之上再加窗口 import java.awt.*; import javax.swing.*; public class test14 extends JFrame {JTextArea wby;JPanel mb;JComboBox xlk;JButton an;JTextField wbk;JScrollPane gd;public static void main…

linux最大权限命令,linux权限管理

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可…

java学习(80):GULqq界面

//qq界面 //面向对象思想,面板,窗口的基础之上再加窗口 import java.awt.*; import javax.swing.*; public class test15 extends JFrame {JLabel bq1;//北部JButton an1,an2,an3; JPanel mb1;//南部JTabbedPane xxk;//中部JPanel mb2,mb3,mb4;JLabel bq…

Linux网络设备描述符,Linux

转载:http://blog.csdn.net/firo_baidu/article/details/6145231放假回家的第一天,呵呵。缅怀Stevens大师。最好的参考资料:1.师从互联网。2.Linux man 命令:man netlink,man rtnetlink。3.UNP v1第18章 。第一条&am…

Android计时器

熟悉和掌握Android线程的使用 实验要求: 完成一个秒表,具备启停功能,正确使用工作线程完成界面刷新 分析秒表的计时是否准确,原因是什么,如何保证秒表计时准确 代码实现: (1)Activit…

java学习(81):静态代码块

//静态代码块class test16 {private static final String URL;private static final String DEVICE;private static final String USER;private static final String ROOT;static test16 self;static {URL"歌谣";DEVICE"笔记本电脑";USER"root";…

linux用echo显示欢迎信息,我使用过的Linux命令之echo - 显示文本、打印信息

用途说明echo命令用来打印信息,是一个最常用的命令。在命令行中常用来打印环境变量的值,已确定当前环境中是否设置了指定的环境变量。在shell脚本中,常用来打印信息和帮助调试程序。常用参数-n 打印信息之后不换行。…

LeetCode 169. Majority Element

LeetCode 169. Majority Element 分析 难度 易 来源 https://leetcode.com/problems/majority-element/ JDK里的排序算法,效率就是高啊 题目 Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊…

java学习(82):静态代码块内部类

//静态代码块内部类 public class test18{private static final String URL;private static final String DEVICE;private static final String USER;private static final String ROOT;static test18 self;static {class Inner{public void printMessage(){System.out.println…

linux进程管理fork,Linux -- 进程管理之 fork() 函数

一个进程调用fork()函数后&#xff0c;系统先给新的进程分配资源&#xff0c;例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中&#xff0c;只有少数值与原来的进程的值不同。相当于克隆了一个自己。Test1for(int i 0; i<2; i){if(fork() 0)print…

java学习(83):常用基础类object

//常用基础类 public class ObjectClass {private String name;private int age;public void say(){System.out.println(name);System.out.println(age);}public void setAge(int age) {this.age age;}public int getAge() {return age;}public void setName(String name) {th…

Elasticsearch及相关插件的安装

Elasticsearch及相关插件的安装 1、安装Elasticsearch并启动服务 2、安装第三方插件 2.1、Head插件 是Elasticsearch的一个集群管理工具&#xff0c;可以通过它来查看和搜索ES的数据&#xff0c;是完全由html5编写的独立网页程序。 2.2、Bigdesk插件 是Elasticsearch的一个集群…

linux上git克隆命令,Git clone命令用法

git clone是git中常用的命令&#xff0c;其作用是将存储库克隆到新目录中。那么在git中&#xff0c;git clone具体该如何用呢?更快更轻松的学习Git,请点击Git微课git clone命令的作用是将存储库克隆到新目录中&#xff0c;为克隆的存储库中的每个分支创建远程跟踪分支(使用git…

java学习(84):object常用方法tostring,equals,hashcode

//object常用方法 public class test21 {public static void main(String[] args) {Object obj new Object();ObjectCl usr new ObjectCl();usr.setAge(6);usr.setName("歌谣");usr.say();//tostringString str usr.toString();System.out.println(str);//equalsO…