1.python的内建函数
help()函数:查看帮助信息;
id() 函数:查看对象的内存地址;
type()函数:查看对象的类型;
isinstance()函数:判断对象类型;
dir()函数:查看对象中的属性、方法等;
len()函数:计算可迭代对象的长度;
dir()函数:显示函数内置属性和方法;
delattr(object, name):删除object对象的某个属性;
hasattr() 函数用于判断对象是否包含对应的属性。
getattr() 函数用于返回一个对象属性值。
setattr():用于设置属性值,该属性不一定是存在的。
open():用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写
input():函数接受一个标准输入数据,返回为 string 类型。
其他如
list(),tuple(),set(),dict(),int(),float(),str(),
map(),filter(),sorted(),format(),sum(),max(),min()…等
2.redis 数据类型和常见操作方法:
数据类型:string、list、hash、set、zset
string操作:
set key value
setex key seconds value 设置过期时间
mset key1 value1 key2 value2 …
append key value
expire key seconds
get key
mget key1 key2 …
del key1 key2 …
hash操作:
hset key field value
hmset key field1 value1 field2 value2 …
hkeys key
hmget key field1 field2 …
hvals key 获取所有的属性值
hdel key field1 field2 …
list类型:
lpush key value1 value2 …
rpush key value1 value2 …
linsert key before或after 现有元素 新元素
lset key index value
lrem key count value
count > 0: 从头往尾移除
count < 0: 从尾往头移除
count = 0: 移除所有
lrange key start stop
set类型:
sadd key member1 member2 …
smembers key
srem key
zset类型:
zadd key score1(权重) member1 score2 member2 …
zrange key start stop
返回score值在min和max之间的成员
zrangebyscore key min max
返回成员member的score值
zscore key member
zrem key member1 member2 …
删除权重在指定范围的元素
zremrangebyscore key min max
3.进程和线程的区别
1.进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位;
2.一个程序至少有一个进程,一个进程至少有一个线程。线程依赖于进程而存在;
3.线程的资源开销比进程小,使得多线程程序的并发性高;
4.进程在执行过程中拥有独立的内存单元,进程之间不共享全局变量。而多个线程共享内存,从而极大地提高了程序的运行效率;
5.主线程会等待所有的子线程结束后才结束,主进程如果需要等待子进程执行完再退出,需要设置join等待。
6.进程间通信可以使用:pipe管道、 message queue消息队列、semophore 信号量、共享内存、socket套接字
7.线程同步方式:互斥锁(可重入锁)、 Semaphore(信号量)、condiction条件判断、同步队列,event事件。
4.celery任务调用方法
delay() 方法是强大的 apply_async() 调用的快捷方式。相当于使用 apply_async()。
二者作用相同,只是 apply_async 可以进行更多的任务属性设置,比如 callbacks/errbacks 正常回调与错误回调、执行超时、重试、重试时间等等
5.常见的魔法属性
-
doc
表示类的描述信息 -
module 和 class
module 表示当前操作的对象在那个模块
class 表示当前操作的对象的类是什么 -
init
初始化方法,通过类创建对象时,自动触发执行 -
del
当对象在内存中被释放时,自动触发执行。 -
call
对象后面加括号,触发执行。 -
dict
类或对象中的所有属性 -
str
如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。
8、getitem、setitem、delitem
用于索引操作,如字典。以上分别表示获取、设置、删除数据
9、getslice、setslice、delslice
该三个方法用于分片操作,如:列表
10、iter()魔法方法 让一个对象变得可以迭代
11、next()魔法方法 定义一个迭代器,让其能够通过next(迭代对象的迭代器)对一个可迭代对象进行迭代
12、 enter(),exit() 魔法方法,上下文管理器时使用,enter() 进入‘上文操作’,exit()进入下文操作
6.列表里某个元素复制n份
li2 = ['a', 'b', 'c', 'd']def list_insert(str1,num,li):"""列表中指定元素复制n份:param str1: 指定元素:param num: 复制n份:return: 新列表"""if str1 not in li or len(str1) > 1: # 如果元素不在列表里面或其不止一个元素,直接返回print('无效操作')returnindex = li2.index(str1)if index == 0:for i in range(num):li2.insert(0, str1)elif index == len(li2) - 1:for i in range(num):li2.append(str1)else:for i in range(num):li2.insert(index, str1)print(li2)list_insert('a', 5, li2)
7.Flask框架获取请求参数(request)
request 就是flask中代表当前请求的 request 对象,其中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求)
request.data
:记录请求的数据,并转换为字符串
request.form
:记录请求中的表单数据
request.args
:记录请求中的查询参数
request.cookies
:记录请求中的cookie信息
request.headers
:记录请求中的报文头
request.method
:记录请求使用的HTTP方法
request.url
:记录请求的URL地址
request.files
:记录请求上传的文件
8.Flask框架响应response
(1)返回JSON
在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应
@app.route('/demo4')
def demo4():json_dict = {
"user_id": 10,"user_name": "laowang"}return jsonify(json_dict)
(2)重定向
重定向到自己写的视图函数
- 可以直接填写自己 url 路径
- 也可以使用 url_for 生成指定视图函数所对应的 url
# 重定向
@app.route('/demo5')
def demo5():return redirect('http://www.itheima.com')@app.route('/demo1')
def demo1():return 'demo1'# 重定向
@app.route('/demo5')
def demo5():return redirect(url_for('demo1'))
重定向到带有参数的视图函数
- 在 url_for 函数中传入参数
# 路由传递参数
@app.route('/user/<int:user_id>')
def user_info(user_id):return 'hello %d' % user_id# 重定向
@app.route('/demo5')
def demo5():# 使用 url_for 生成指定视图函数所对应的 urlreturn redirect(url_for('user_info', user_id=100))
(3)自定义状态码
在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码,例如:status code: 666
@app.route('/demo6')
def demo6():return '状态码为 666', 666
9.Django框架获取请求参数(request)
(1)未命名参数按定义顺序传递;
(2)命名参数按名字传递;
(3)获取请求路径中的查询字符串参数(形如?k1=v1&k2=v2),可以通过request.GET
属性获取,返回QueryDict对象。查询字符串不区分请求方式,即假使客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据。
(4)前端发送的表单类型的请求体数据,可以通过request.POST
属性获取,返回QueryDict对象;只要请求体的数据是表单类型,无论是哪种请求方式(POST、PUT、PATCH、DELETE),都是使用request.POST来获取请求体的表单数据。
(5)非表单类型的请求体数据,Django无法自动解析,可以通过request.body
属性获取最原始的请求体数据,自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型。
(6)请求头:可以通过request.META
属性获取请求头headers中的数据,request.META为字典类型。
(7)request.method
:一个字符串,表示请求使用的HTTP方法,常用值括:‘GET’、‘POST’。
(8)request.user
:请求的用户对象。
(9)request.path
:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
(10)request.encoding
:一个字符串,表示提交的数据的编码方式。如果为None则表示使用浏览器的默认设置,一般为utf-8。这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
(11)request.FILES
:一个类似于字典的对象,包含所有的上传文件。
10.Django框架response
(1) HttpResponse
可以使用django.http.HttpResponse来构造响应对象。
Response(content=响应体, content_type=响应体数据类型, status=状态码)
也可通过HttpResponse对象属性来设置响应体、响应体数据类型、状态码:
content
:表示返回的内容。status_code
:返回的HTTP响应状态码。content_type
:指定返回数据的的MIME类型。
响应头可以直接将HttpResponse对象当做字典进行响应头键值对的设置。
response = Response()
response['Itcast'] = 'Python' # 自定义响应头Itcast, 值为Python
(2)HttpResponse子类
Django提供了一系列HttpResponse的子类,可以快速设置状态码
HttpResponseRedirect 301
HttpResponsePermanentRedirect 302
HttpResponseNotModified 304
HttpResponseBadRequest 400
HttpResponseNotFound 404
HttpResponseForbidden 403
HttpResponseNotAllowed 405
HttpResponseGone 410
HttpResponseServerError 500
(3)JsonResponse
若要返回json数据,可以使用JsonResponse来构造响应对象,作用:
- 帮助我们将数据转换为json字符串
- 设置响应头Content-Type为 application/json
from django.http import JsonResponsedef demo_view(request):return JsonResponse({
'city': 'beijing', 'subject': 'python'})
(4)redirect重定向
11.Django REST framework框架(request)
REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。
(1)request.data
返回解析之后的请求体数据。类似于Django中标准的request.POST和 request.FILES属性,但提供如下特性:
- 包含了解析之后的文件和非文件数据
- 包含了对POST、PUT、PATCH请求方式解析后的数据
- 利用了REST framework的parsers解析器,不仅支持表单类型数据,也支持JSON数据
(2)request.query_params
与Django标准的request.GET相同,只是更换了更正确的名称而已。
12.Django REST framework框架(response)
rest_framework.response.Response
REST framework提供了一个响应类Response,使用该类构造响应对象时,响应的具体数据内容会被转换(render渲染)成符合前端需求的类型。
REST framework提供了Renderer 渲染器,用来根据请求头中的Accept(接收数据类型声明)来自动转换响应数据到对应格式。如果前端请求中未进行Accept声明,则会采用默认方式处理响应数据,我们可以通过配置来修改默认响应格式。
REST_FRAMEWORK = {'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类'rest_framework.renderers.JSONRenderer', # json渲染器'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器)
}
构造方式
Response(data, status=None, template_name=None, headers=None, content_type=None)
data数据不要是render处理之后的数据,只需传递python的内建类型数据即可,REST framework会使用renderer渲染器处理data。
data不能是复杂结构的数据,如Django的模型类对象,对于这样的数据我们可以使用Serializer序列化器序列化处理后(转为了Python字典类型)再传递给data参数。
参数说明:
data: 为响应准备的序列化处理后的数据;
- status: 状态码,默认200;
- template_name: 模板名称,如果使用HTMLRenderer 时需指明;
- headers: 用于存放响应头信息的字典;
- content_type: 响应数据的Content-Type,通常此参数无需传递,REST framework会根据前端所需类型数据来设置该参数。
常用属性:
1).data
传给response对象的序列化后,但尚未render处理的数据
2).status_code
状态码的数字
3).content
经过render处理后的响应数据
- 状态码
为了方便设置状态码,REST framewrok在rest_framework.status模块中提供了常用状态码常量。
1)信息告知 - 1xx
HTTP_100_CONTINUE
HTTP_101_SWITCHING_PROTOCOLS
2)成功 - 2xx
HTTP_200_OK
HTTP_201_CREATED
HTTP_202_ACCEPTED
HTTP_203_NON_AUTHORITATIVE_INFORMATION
HTTP_204_NO_CONTENT
HTTP_205_RESET_CONTENT
HTTP_206_PARTIAL_CONTENT
HTTP_207_MULTI_STATUS
3)重定向 - 3xx
HTTP_300_MULTIPLE_CHOICES
HTTP_301_MOVED_PERMANENTLY
HTTP_302_FOUND
HTTP_303_SEE_OTHER
HTTP_304_NOT_MODIFIED
HTTP_305_USE_PROXY
HTTP_306_RESERVED
HTTP_307_TEMPORARY_REDIRECT
4)客户端错误 - 4xx
HTTP_400_BAD_REQUEST
HTTP_401_UNAUTHORIZED
HTTP_402_PAYMENT_REQUIRED
HTTP_403_FORBIDDEN
HTTP_404_NOT_FOUND
HTTP_405_METHOD_NOT_ALLOWED
HTTP_406_NOT_ACCEPTABLE
HTTP_407_PROXY_AUTHENTICATION_REQUIRED
HTTP_408_REQUEST_TIMEOUT
HTTP_409_CONFLICT
HTTP_410_GONE
HTTP_411_LENGTH_REQUIRED
HTTP_412_PRECONDITION_FAILED
HTTP_413_REQUEST_ENTITY_TOO_LARGE
HTTP_414_REQUEST_URI_TOO_LONG
HTTP_415_UNSUPPORTED_MEDIA_TYPE
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE
HTTP_417_EXPECTATION_FAILED
HTTP_422_UNPROCESSABLE_ENTITY
HTTP_423_LOCKED
HTTP_424_FAILED_DEPENDENCY
HTTP_428_PRECONDITION_REQUIRED
HTTP_429_TOO_MANY_REQUESTS
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS
5)服务器错误 - 5xx
HTTP_500_INTERNAL_SERVER_ERROR
HTTP_501_NOT_IMPLEMENTED
HTTP_502_BAD_GATEWAY
HTTP_503_SERVICE_UNAVAILABLE
HTTP_504_GATEWAY_TIMEOUT
HTTP_505_HTTP_VERSION_NOT_SUPPORTED
HTTP_507_INSUFFICIENT_STORAGE
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED