第一部分:
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、在哪用过中间件?
- 登录验证:
- 权限处理:
- 内置的csrf、session、全站缓存:
- 跨域请求:
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组件的作用?
- django的Form组件主要有两个作用:1.对用户请求的数据进行验证;2.生成HTML标签,他可以在页面重生成input标签;
- Form对象是一个可迭代对象,这儿一般都会遇到从数据库获取数据造成数据无法实时更新的问题:解决办法是重写构造方法,在构造方法中重新去数据库获取值,
9.多数据库相关的操作
在同一个项目下多个App可能会有各自的数据库,而不是供应同一个数据库,在 做数据库迁移时需要注意:
python manage.py makemigrations
python manage.py migrate app名称 --database=配置文件数据库的别名
10、谈谈你对restfull 规范的认识?
- https
- 域名:api.oldboy.com
www.oldboy.com/api - 版本:www.oldboy.com/api/v1
- URL资源,名词:www.oldboy.com/api/v1/student
- 请求方式:GET/POST/PUT/DELETE/PATCH/OPTIONS/HEADERS/TRACE
- 返回值:www.oldboy.com/api/v1/student/ -->返回结果集
www.oldboy.com/api/v1/student/1/ -> 单个对象 - URL添加条件:www.oldboy.com/api/v1/student?page=11&size=9
- 状态码:200/300/301/302/400/403/404/500
- 错误信息:
{
code:1000,
meg:'xxxx'
} - 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 内部帮我们提供了很多方便的组件,我们通过配置就可以完成相应的操作,比如:
- 序列化,可以做用户请求数据校验+queryset对象的序列化称为json
- 解析器,获取用户请求数据request.data,会自动根据content-type请求头的不同对数据进行解析
- 分页,将从数据库获取到的数据在页面进行分页显示
还有其他:认证/权限/访问频率控制等
12、rest framework视图你都用过哪些基类
- 继承API'View
这个类属于rest framework中顶层类,内部帮我们实现了基本功能:认证/权限/频率控制,但凡是数据库,分页等操作都需要手动去完成,比较原始。 - 继承:ModelViewSet / mixins.CreateModelMixin,GenericViewSet / mixins.createModelMkixin,DestroyModellMixin,GenericViewSet
对数据库克分页等操作不我们再编写,只需要继承相关类即可