第一部分:

1、为什么要学python?

当初想学一门语言又不知道学哪门语言好,朋友给我推荐说python简单易学,适合入门的人学习,后面我自己网上查了查关于python的信息,知道了python确实是适合小白学习的一门语言,
python语法优雅,没有像其他语言的大括号,分号等特殊符号,而且入手快,python的生态圈比较大,Python涉及的领域有:WEB开发、网络编程、爬虫、云计算、人工智能、自动化运
维、金融分析、科学运算、游戏开发,所以我经过考虑选择学习python  

2、谈谈你对python和其他语言的区别?

Python是一种解释型语言。

这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。
Python是动态类型语言
指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。
Python非常适合面向对象的编程,因为它支持通过组合与继承的方式定义类。在Python语言中,

。这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输入。类(class)也是第一类对象。函数是第一类对象
Python代码编写快 ,但是运行速度比编译语言通常要慢。好在Python允许加入基于C语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。numpy就是一个很好地例子,
它的运行速度真的非常快,因为很多算术运算其实并不是通过Python实现的。 Python用途非常广泛——网络应用, 自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他
语言和组件改善运行状况。 Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节。

 

3、python中的数据类型:

1、字符串:

在python中,加了引号的字符就是字符串类型,python中没有字符类型
python中字符串常见的方法:
    1、strip,lstrip,rstrip  #去空格,strip去两边空格,lstrip去左边,r去右边 
    2、lower,upper        #lower将字符串转化为小写,upper转化为大写
    3、startswith,endswith  #可以判断是否已...开头或结尾
    4、format的三种玩法
              res='{} {} {}'.format('egon',18,'male')
              res='{1} {0} {1}'.format('egon',18,'male')
              res='{name} {age}{sex}'.format(sex='male',name='egon',age=18)
    5、split,rsplit #将字符串进行分割可以指定分割符加r从右进行分割
    6、join        #将列表中的字符串拼接成一个字符串
    7、replace   #将字符串中国的某个位置进行替换
    8、isdigit     #判断字符串是否是数字

2、字典:

3、元组:

4、列表:

5、集合:

6、 collections:

4、函数:

1、函数参数传递的是什么?

2、def func(a,b=[]):pass - lambda 表达式

3、列表生成式 []

4、生成器表达式 (for i in range(1))

val = [lambda :i+1 for i in range(10)]
val[0]
data = val[0]()
print(data

5、 常见内置函数: 

  - map
  - reduce
  - filter
  - zip
  - instance
  - type
  -

6、生成器、迭代器、装饰器

 

第二部分

 

 

第三部分

Web框架:

1. 你了解哪些Web框架和区别?

django、flask、Tornado

它们的区别:

django:大而全的web框架,内置很多组件,比如:ORM,admin、Form、ModelForm、中间件、csrf等,适合开发比较复杂的程序

而flask:是微型框架,但是它的可扩展性强,如果开发简单的程序使用flask比较快速,如果flask想要实现复杂功能就需要引入一些组件如:flask-session、flask-SQLAlchemy、wtforms、flask-migrate、flask-script、blinker等

它们都是基于wsgi协议实现的,但默认使用的wsgi模块不一样。django用的是wsgiref模块,而flask用的则是uwsgi,werkzurg模块,这两个框架显著地区别是它们处理请求的方式不同:

django:是将请求封装成request对象,在通过参数进行传递

flask:通过上下文管理实现

2. Django请求生命周期?

 

3. 什么是wsgi?   

wsgi是web服务网关接口,是一套协议。以下模块实现了wsgi协议:

  • wsgiref
  • werkzurg
  • uwsgi

以上模块本质:实现socket监听请求,获取请求后将数据封装,然后交给web框架处理。

4. 中间件

1、中间件的作用?

  对所有的请求进行批量处理,在视图函数执行前后进行自定义操作。

2、中间件中方法?

  • process_request
  • process_view
  • process_template_response
  • process_response
  • process_excaption

3、在哪用过中间件?

  1. 登录验证:
  2. 权限处理:
  3. 内置的csrf、session、全站缓存:
  4. 跨域请求:

4、csrf本质?

- 用户先发送GET获取csrf token: Form表单中一个隐藏的标签 + cookie

- 发起POST请求时,需要携带之前发送给用户的csrf token;

- 在中间件的process_view方法中进行校验。

5. 路由系统

 

6. 视图

FBV

CBV

FBV和CBV的区别:它俩没什么区别,因为它们本质上都是函数。CBV的.as_view()返回的view函数,view函数中调用类的dispatch方法,在dispatch方法中通过反射执行get、post、delete、put等,还有就是CBV比较简洁,GET、POST等业务功能分别放在不同get、post函数中,FBV得我们自己做判断

用CBV时csrf的装饰器要加到dispath

7.ORM操作:

#添加数据
models.UserInfo.objects.create()

obj=models.UserInfo(name="xxx")#以对象的方式添加
obj.save()

models.UserInfo.objects.bulk_create([models.UserInfo(name="xx"),
                                     models.UserInfo(name="xxx")])#批量添加数据

#更新数据
models.UserInfo.objects.all().update(age=18)#直接替换原来的数据
models.UserInfo.objects.all().update(salary=F('salary')+1000)#在原来的基础上加1000


#删除表中数据

models.UserInfo.objects.all().delete()

.all()#查询所有
.filter()#查询符合条件的数据
.get()#返回符合条件的对象,返回结果有且只能有一个,否则报错
.exclude()#查询不符合条件的对象
.values()#返回特殊的QuerySet,里边是字典
.values_list()#与values相似,但他返回的是元组
.order_by()#对查询结果排序
.reverse()#对查询结果反向排序
.distinct()#给查询结果去重
.count()#返回查询QuerySet的对象数量
.first()#返回第一条记录
.last()#返回最后一条记录
.exists()#如果QuerySet中包含数据返回True,否则返回False
.extra()#用原生sql语句
.raw()#
.using#选择要操作的数据库
.only#只查某字段
.defer()#查除了某个字段
.[]
.aggregate#聚合函数


#表之间关系有关的
add()
set()
remove()            

8.django的Form组件的作用?

  1.  django的Form组件主要有两个作用:1.对用户请求的数据进行验证;2.生成HTML标签,他可以在页面重生成input标签;
  2. Form对象是一个可迭代对象,这儿一般都会遇到从数据库获取数据造成数据无法实时更新的问题:解决办法是重写构造方法,在构造方法中重新去数据库获取值,

9.多数据库相关的操作

在同一个项目下多个App可能会有各自的数据库,而不是供应同一个数据库,在 做数据库迁移时需要注意:

python  manage.py makemigrations

python manage.py migrate app名称 --database=配置文件数据库的别名

10、谈谈你对restfull 规范的认识?

  1. https
  2. 域名:api.oldboy.com
         www.oldboy.com/api
  3. 版本:www.oldboy.com/api/v1
  4. URL资源,名词:www.oldboy.com/api/v1/student
  5. 请求方式:GET/POST/PUT/DELETE/PATCH/OPTIONS/HEADERS/TRACE
  6. 返回值:www.oldboy.com/api/v1/student/  -->返回结果集
    www.oldboy.com/api/v1/student/1/  -> 单个对象
  7. URL添加条件:www.oldboy.com/api/v1/student?page=11&size=9
  8. 状态码:200/300/301/302/400/403/404/500
  9. 错误信息:
    {
    code:1000,
    meg:'xxxx'
    }
  10. hyperlink:
    {
    id:1
    name: ‘xiangl’,
    type: http://www.xxx.com/api/v1/type/1/
    }

restful其实就是一套编写接口的协议,协议规定如何编写以及如何设置返回值,状态码等信息。

显著地特点是:给用户一个url,根据method不同在后端做不同的处理,比如:post创建数据,get获取数据,put和patch修改数据,delete删除数据。

当然,还有其他的,比如:

版本,来控制让程序有多个版本共存的情况,版本可以放在url,请求头(accept/自定义),GET参数

状态码:200/300/400/500

url中尽量使用名词,restful也可以称为“面向资源编程”

api标示:api.luffycity.com/      www.luffycity.com/api/

11、为什么要使用django rest framework 框架

在编写接口时可以不使用django rest framework框架,如果不使用那么就可以用django的CBV来实现,开发者的代码会更多一些

如果使用django rest framework 内部帮我们提供了很多方便的组件,我们通过配置就可以完成相应的操作,比如:

  1. 序列化,可以做用户请求数据校验+queryset对象的序列化称为json
  2. 解析器,获取用户请求数据request.data,会自动根据content-type请求头的不同对数据进行解析
  3. 分页,将从数据库获取到的数据在页面进行分页显示

还有其他:认证/权限/访问频率控制等

12、rest framework视图你都用过哪些基类

  1. 继承API'View
    这个类属于rest framework中顶层类,内部帮我们实现了基本功能:认证/权限/频率控制,但凡是数据库,分页等操作都需要手动去完成,比较原始。
  2. 继承:ModelViewSet / mixins.CreateModelMixin,GenericViewSet / mixins.createModelMkixin,DestroyModellMixin,GenericViewSet
    对数据库克分页等操作不我们再编写,只需要继承相关类即可

 

posted on 2018-05-08 23:12  无痕5201314  阅读(94)  评论(0编辑  收藏  举报