面试题1:9月25日面试题

目录

1.简述HTTP协议

2.请求头都包含哪些东西?

3.常用状态码都有哪些?

4.django请求生命周期?

5.如何自定义中间件

6.django怎么执行原生sql语句

7.什么是CBV和FBV?

8.什么是MTV框架、MVC框架?

9.csrf攻击原理

10.ORM常用方法

11.简述cookie和session

12.django创建项目的命令是什么?

13.ORM如何批量创建数据?

14.中间件的作用场景

1.HTTP协议

'''
HTTP协议:超文本传输协议
是一个基于应用层的协议
现如今使用最广泛的版本是HTTP 1.1
它是客户端和服务端请求和应答的标准

HTTP请求响应过程:
客户端发送一个请求报文
服务器解析请求,并向客户端发送响应报文
客户端浏览器解析HTML内容

'''

2.请求头都包含哪些东西?

'''
头部字段名:值 + 回车符 + 换行符
头部字段名:值 + 回车符 + 换行符
头部字段名:值 + 回车符 + 换行符
'''

3.常用状态码都有哪些?

'''
200 请求成功 
404 网页不存在
500 内部服务器错误
403 Forbidden 拒绝执行请求
'''

4.django请求生命周期

'''
浏览器输入了url到wsgi wsgi中封装了socket
之后走中间件 url控制器 视图函数
视图函数进行ORM操作就可以操作数据库
视图函数通过render模板渲染就可以到Template
模板渲染后 可以返回到视图函数 
再通过中间件 通过wsgi返回给浏览器
这样浏览器就可以看到页面了...
'''

5.如何自定义中间件

'''
1.先在应用下创建一个文件夹,比如起名mymiddleware
2.在middleware文件夹下创建一个py文件,比如叫auth.py
3.在auth.py中
    先引入一个MiddlewareMixin类
    定义一个类,该类继承MiddlewareMixin类
    在里面可以定义中间件的5个方法
'''

6.django怎么执行原生sql语句

'''
1.在django里面,可以用raw()方法执行原生sql语句
models.Book.object.all(select name from book)

2.从django提供的接口 像使用pymysql模块一样操作数据库
游标cursor-->execute-->fetchone
'''

7.什么是CBV和FBV?

'''
CBV和FBV都是针对于视图函数的
CBV:在视图里使用类处理请求
FBV:在视图里使用函数处理请求
'''

8.什么是MTV框架、MVC框架?

'''
MVC:将web应用分为模型M 控制器C 和 视图V三层
模型 负责业务和数据库的映射
视图 负责和用户的交互页面
控制器接受模型和视图完成用户的请求

MTV:django中的
M:Model 负责业务和数据的映射 ORM
T:Template 负责如何把页面展示给用户 html
V:View 负责业务逻辑,并在适当时候调用Model和Template
还有一个url分发器 负责将不同URL分发给不同的view处理
view再调用Model和Template
'''

9.csrf攻击原理

'''
csrf:跨站请求伪造

csrf跨站请求伪造校验
        网站在给用户返回一个具有提交数据的页面的时候会给这个页面加一个唯一标识
        当这个页面朝后端发送post请求的时候,后端会先校验唯一标识
            如果唯一标识不对,直接拒绝(403 forbidden)
            如果成功则正常执行
两个网站请求两个页面,两个网站分别返回两个页面,两个页面长的一模一样
当页面提交post请求的时候

**:网站在返回页面的时候,给每个页面都携带了一个随机标识过去的
    两个网站请求两个页面 
        客户端向服务端发送请求 
        服务端返回页面给客户端,在返回页面的时候是带了一个随机标记过去的
            比如说正常网站请求页面,网站返回一个页面,并携带随机标识33333
            钓鱼网站请求页面,网站返回一个页面,并携带随机标识44444(因为标识唯一,所以两个标识绝对不相同)
        客户端(浏览器)有input框,输入数据提交,这个时候客户端向服务端发送POST请求
        服务端会验证你发过来的post请求里,有没有唯一标记33333
        而钓鱼网址他的唯一标识,是钓鱼网址的服务端给它发的44444
        而当正常网址/钓鱼网址提交post请求时,服务端会验证你的唯一标识是否是他之前给客户端的那个
            如果唯一标识正确,就可以向后台提交数据
            如果唯一标识错误,就会把它forbidden 403掉,不能向后台提交数据


'''

10.ORM常用方法

'''
all() 获取表中所有数据 结果为queryset类型
filter() 获取部分数据 结果为queryset类型
get() 获取单条数据,结果为model对象
first()queryset数据类型调用 返回第一条数据
values() 获取记录的某些字段数据
'''

11.简述cookie和session

# cookie
'''
cookie出现的原因:HTTP无状态,每次请求都是独立的,服务器不知道客户端是什么状态
cookie原理:
    1.浏览器访问服务端,带着一个空的cookie
    2.然后由服务器产生cookie,浏览器收到响应后保存在本地
    3.浏览器再次访问时,就会自动带上cookie,服务器就可以通过cookie来判断来访问的是谁了
'''

# session
'''
session出现的原因:
    1.cookie是明文存储的
    2.cookie的大小限制为4kb
    
session原理:
    1.用户登录后生成一个字典{Key:Value},key是由服务端生成的cookie,value是一个自定义格式的字典,比如{islogin:True}
    2.往字典里存储信息:比如存用户是否登录:{islogin:True}
    3.当我们在django中使用session时,cookie由服务端随机生成,写到浏览器的cookie中
    4.每个浏览器都有自己的cookie值,是session寻找用户信息的唯一标识
    5.request.session <==> 1中key对应的value

session好处:
    cookie保存在浏览器,session保存在客户端
'''

12.django创建项目的命令是什么?

# django_admin startproject django_orm

13.ORM如何批量创建数据?

# models.Book.objects.bulk_create(obj_list) 

14.中间件的作用场景

'''
图书管理系统
不登录不可以查看所有书籍 以及添加修改和删除等操作
所以定义中间件 在请求之前设置中间件 
判断登录状态 如果登录了 就可以查看界面进行操作
没有登录 就不能看到页面进行任何操作
'''