面试准备5之rest-framework部分
rest-framework部分
1.你理解的Http协议?
答:1超文本协议,基于tcp协议的应用层协议,端口号80
本质就是一个socket客户端。请求--》响应--》断开
2 无连接无状态
解决无状态有cookie与session策略
3请求首行 请求头与请求体,请求头与请求体之间用双\r\n分隔
4 常用的状态码有
200:成功
301:临时重定向、302:永久重定向
403:crsf_token错误
500:服务器端错误
4常用的方法有get、post、put、patch、delete、options请求
5 重要的请求头有cookie、contenttype、useragent、referer(跳转源,防盗链使用)
请求体:发送post请求后,request.post只能接收urlencoded格式,无法获取ajax发送的请求,而request.body均可以拿到
1. django请求生命周期(包含rest framework框架)
wsgi-->中间件--->process_request--->process_匹配到url--->process_view--->执行视图--->process_template_response
2. 中间件是什么?,做过什么?
答:就是对请求执行前的操作部分,有内置的:csrf、session也有自定义的
答:做过:认证、权限、频率、session、静态文件、跨域等操作
3. csrf原理
请求是带着一个字符串,post请求时需要带着这个字符串
4. restful 10规范
1. restful 规范(10)---------------------
什么是接口?
- URL
- 约束
# 约束继承(实现)了他的类中必须含有IFoo中的方法
interface IFoo:
def func(self): pass class Foo(IFoo):
def func(self):
print(11111) 1. 根据method不同,进行不同操作
GET/POST/PUT/DELETE/PATCH
2. 面向资源编程
http://www.luffycity.com/salary 3. 体现版本
http://www.luffycity.com/v1/salary
http://www.luffycity.com/v2/salary https://v4.bootcss.com/
https://v3.bootcss.com/
4. 体现是API
http://www.luffycity.com/api/v1/salary
http://www.luffycity.com/api/v2/salary http://api.luffycity.com/v1/salary
http://api.luffycity.com/v2/salary
5. https
https://www.luffycity.com/api/v1/salary
https://www.luffycity.com/api/v2/salary 6. 响应式设置状态码
200
300
400
500
return HttpResponse('adfasdf',status=300) 7. 条件
https://www.luffycity.com/api/v2/salary?page=1&size=10 8. 返回值
https://www.luffycity.com/api/v2/salary
GET: 所有列表
{
code: 10000,
data: [
{'id':1,'title':'高亮'},
{'id':1,'title':'龙泰'},
{'id':1,'title':'小东北'},
]
} POST: 返回新增的数据
{'id':1,'title':'高亮'} https://www.luffycity.com/api/v2/salary/1/
GET: 获取单条数据
{'id':1,'title':'高亮'}
PUT:更新
{'id':1,'title':'高亮'}
PATCH: 局部更新
{'id':1,'title':'高亮'}
DELETE:删除 9. 返回错误信息
{
code: 100001,
error: 'xxx错误'
} 10. Hypermedia API
ret = {
code: 1000,
data:{
id:1,
name:'小强',
depart_id:http://www.luffycity.com/api/v1/depart/8/
}
} 建议大家使用restful规范
restful10条规范
5.restframework组件
路由--》视图--》版本---》认证--》权限--》频率--》解析器--》序列化--》分页--》-->渲染器
序列化:
1:一对一:字段指定source
2:choices字段:get_字段_display
3:一对多、多对多、反向查询:
chapter=serializers.SerializerMethodField()
def get_chapter(self, obj):
query = obj.course.chapter_set.all()
return [{'id': row.id, 'name': row.name} for row in query]
class CourseDetailSerializers(serializers.ModelSerializer):
# 一对一字段显示关联表字段-----------------------------
title=serializers.CharField(source='course.title')
course_img=serializers.CharField(source='course.course_img')
# 显示choices字段方法---------(get_字段_display)-----------------------------
choices=serializers.CharField(source='course.get_level_display')
# 多对多------第一步骤
recommends = serializers.SerializerMethodField()
# 一对多(显示章节)
chapter=serializers.SerializerMethodField() class Meta:
model = CourseDetail
fields = ['slogon','why','course','title','course_img','choices','recommends','chapter']
def get_recommends(self,obj):#多对多第二步骤
queryset=obj.recommend_courses.all()
return [{'id':row.id,'title':row.title} for row in queryset] def get_chapter(self, obj):
query = obj.course.chapter_set.all()
return [{'id': row.id, 'name': row.name} for row in query]
6.你的写的类都继承过哪些类?
class View(object): class APIView(View): class GenericAPIView(views.APIView): class GenericViewSet(ViewSetMixin, generics.GenericAPIView) class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
面试准备5之rest-framework部分的更多相关文章
- Spring 面试问题 TOP 50
Spring 面试问题 TOP 50 Spring Framework 现在几乎已成为 Java Web 开发的标配框架.那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢? ...
- windows类书的学习心得
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...
- framework各版本新特性(为面试准备)
菜鸟D估计描述这些新特性的文章都是烂大街的货色,之所以拿出来分(e)享(xin)一下,有两个原因:1.当年面试的时候有人问到,我不知道该怎么回答:2.项目需要发布了,但是考虑到framework的版本 ...
- .NET面试经典三问:什么是.NET?什么是.NET Framework?什么是.NET Core?
什么是.NET?什么是.NET Framework? 本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要 ...
- 2016年8月ios面试问题总结
1.app分发方式 所谓分发方式简单点讲就是你的app都可以通过哪些途径给用户使用. a:个人或者公司的开发者账号 可以上传appStore,用户通过appStore下载. b:企业账号:打包分发. ...
- .Net程序员面试所需要的一些技术准备
夜已经很深了,但却毫无睡意,最近找工作和面试感触良多,所以想记录下来这段过程. 作为一个.Net程序员,不可否认是比JAVA要难混的.甚至在智联招聘或者大街网都没有.NET程序员的备用选项.真是令人悲 ...
- 由面试引发的思考:B/S与C/S究竟是何物
一.现状说明: 就在这金三银四的求职黄金时期,我有幸作为公司的独立技术面试官,拥有最终决定录用权,在倍受上级领导的充分信任下,我也向上级保证,一定要为公司找到合适的人才,就在我满怀信心的情况下面试了一 ...
- C#基础系列——再也不用担心面试官问我“事件”了
前言:作为.Net攻城狮,你面试过程中是否遇到过这样的问题呢:什么是事件?事件和委托的区别?既然事件作为一种特殊的委托,那么它的优势如何体现?诸如此类...你是否也曾经被问到过?你又是否都答出来了呢? ...
- .NET工程师面试宝典
.Net工程师面试笔试宝典 传智播客.Net培训班内部资料 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面试现场带过来的真实笔试面试题,覆盖了主流的 ...
- asp.net c# 网上搜集面试题目大全(附答案)
1.String str=new String("a")和String str = "a"有什么区别? String str = "a"; ...
随机推荐
- [转] kerberos介绍
[From] https://www.cnblogs.com/ulysses-you/p/8107862.html 重要术语 1. KDC 全称:key distributed center 作用:整 ...
- Revit二次开发_快速显示隐藏剖面框
最近遇到一种状况需要经常切换剖面框的可见性,于是想将剖面框的显示与隐藏做成一个按钮,方便切换. 其他类似元素想做成快速切换可见性应该可以使用类似做法. 这次的隐藏对象是剖面框,所以我直接就隐藏元素了. ...
- Python时间time模块介绍
一.明确时间元组 二.测试代码#!/usr/bin/env python # -- coding: utf-8 --' """ 时间模块,time的相关操作与测试 &qu ...
- JAVA学习6:用Maven创建Spring3 MVC项目
一. 环境 spring-framework-3.2.4.RELEASE jdk1.7.0_11 Maven3.0.5 eclipse-jee-juno-SR2-win32 二. ...
- [Android]Caused by: java.lang.IllegalArgumentException: Service not registered.md
Caused by: java.lang.IllegalArgumentException: Service not registered: org.diql.aidldemo.MainActivit ...
- jedis入门教程
1 jedis介绍 2 java连接Redis 1 导入jar包 2 连接实例 @Test //获得单一的jedis对象操作数据库 public void test1(){ //1.获得连接对象 设置 ...
- 开源移动端IM比较SipDroid,IMSDroid,CSipsimple,Linphone,webrtc
最新要做一个移动端视频通话软件,大致看了下现有的开源软件 一) sipdroid1)架构sip协议栈使用JAVA实现,音频Codec使用skype的silk(Silk编解码是Skype向第三方开发人员 ...
- RequireJs学习笔记之Define a Module
简单的键值对定义define({ color: "black", size: "unisize"}); 如果一个模块没有任何依赖,又需要做用一个函数 ...
- WEB前端笔记
HTML+CSS部分 IE6使用PNG的透明问题 解决关键字 DD_belatedPNG_0.0.8a.js Google或百度一下,下载之 <!--[if lte IE 6]> < ...
- MySQL查询近一个月的数据
MySQL查询近一个月的数据 近一个月统计SQL select user_id, user_name, createtime from t_user where DATE_SUB(CURDATE(), ...