最近遇到的各种问题与解决方法

Posted by dzt on October 18, 2018
11:17 在run manage.py Task时 报错 SyntaxError: Non-ASCII character ‘\xe8’ in file”的解决办法

解决办法 首先发现文件名带有中文 把 mysite的副本 改为 mysite 然后还是报同样的错误 不过这次地址为settings.py 之前为python27下的__init__.py 说明之前的错误已经改完 接下来就是: 打开报错文件,在最上方加上

# -*- coding: utf-8 -*-

解决后成功同步数据库

11:44 https://blog.csdn.net/rongyongfeikai2/article/details/50322769

1.permission设为了any即任意人都可以发送rest请求;但实际使用场景中,应该用restframework的校验模块的 2.示例中逻辑都在views.py中,实际场景中views中的逻辑不易过多;数据的处理应该主要是在models.py中处理,然后views调用models.py中的方法,得到数据结果,最后进行返回

11:50 traceback.print_exc()

使用traceback.print_exc()来代替 print(Error) 来输出详细的异常信息 traceback.print_exc() 不但可以报错还是可以报出出错文件地址行数

traceback.print_exc()跟traceback.format_exc()有什么区别呢? format_exc()返回字符串,print_exc()则直接给打印出来。 即traceback.print_exc()与print traceback.format_exc()效果是一样的。 print_exc()还可以接受file参数直接写入到一个文件。比如 traceback.print_exc(file=open(‘tb.txt’,’w+’)) 写入到tb.txt文件去。

serializers.py

ModelSerializer 比Serializer封装好了一层,直接自己生成的create和update,不用覆盖了,其实推荐用这个,毕竟Serializer封装的很低级,既然用django,就要用好点的 https://blog.csdn.net/xiaotao745324325/article/details/51834169

13:50 python2.7
def wrapper(*args, **kwargs):
	global _exception
	try:
		fn(*args, **kwargs)

*args表示任何多个无名参数,它是一个tuple

**kwargs表示关键字参数,它是一个dict

测试代码如下:

def foo(*arg,**kwargs):
    print 'args=',args
    print 'kwargs=',kwargs
    print '**********************'
if __name__=='__main__':
    foo(1,2,3)
    foo(a=1,b=2,c=3)
    foo(1,2,3,a=1,b=2,c=3)
    foo(1,'b','c',a=1,b='b',c='c')

执行结果如下:

args=(1,2,3)
kwargs={}
**********************
args=()
kwargs={'a':1,'c':3,'b':2}
**********************
args=(1,'b','c')
kwargs={'a':1,'c':'c','b':'b'}
**********************
14:25 发现View中各种类继承的不是(View)而是(APIView) https://blog.csdn.net/runnoob_1115/article/details/78486842

在此链接文章中顺便解决了 permission_classes: 权限赋予类 @permission_classes(…) 每个装饰器都有一个单独的参数,必须是类列表或者类元组。 一. APIView与View的区别

1.APIView是View的子类 2.传递给请求处理程序的request实例是REST框架的请求实例,而不是Django的HttpRequest实例 3.处理程序返回的基于REST框架的Response,而不是Django的HttpResponse,视图函数将会管理内容协商,然后设置正确的渲染方式 4.任何APIException将会被捕捉,然后转换成合适的response对象 5.接收到的请求首先被认证,然后赋予相应的权限,然后通过节流器分发给相应的请求处理函数,类似.get()和.post()