有bug反馈证明 有人在用,在学。这点很好。当然随着 难度不断的提升,一些bug也并不是我故意埋的了。感谢反馈的小伙伴等人!
bug1: 新建项目 ,打开登陆态接口,看到的场景很诡异:
如图,如果你想知道为什么这么诡异,现在,就带你研究!
这个问题的罪魁祸手是 views.py中的这个函数:
当项目并没有设置 登陆态的时候,就返回了个空字典。这样前端的js自然找不到里面的内容,从而展示空白/undefined等。
所以修复这个问题也简单,我们给这个空字典改成一个有各个必要字段的字典就好了:
# 获取项目登陆态
def project_get_login(request):
project_id = request.GET['project_id']
try:
login = DB_login.objects.filter(project_id=project_id).values()[0]
except:
login = {"project_id":project_id,"api_method":"none","api_url":"","api_header":"{}","api_host":"","body_method":"none",
"api_body":""}
return HttpResponse(json.dumps(login),content_type='application/json')
然后我们刷新页面再打开就可以看到如下正常效果了:
bug2 :新项目的登陆态接口保存失败!
这个问题的诱发原因就是,新项目并没有在数据库中的登陆态。而代码中又仅仅是保存。所以这里我们要用到一个orm方法:更新或新建 upate_or_create
意思就是 如果存在就更新,不存在就创建。
这个update_or_create的用法如下:
数据表.object.update_or_create( 更新用的字典,查询的字段 )
其中查询字段可以是多个
# 保存登陆态接口
def project_login_save(request):
# 提取所有数据
project_id = request.GET['project_id']
login_method = request.GET['login_method']
login_url = request.GET['login_url']
login_host = request.GET['login_host']
login_header = request.GET['login_header']
login_body_method = request.GET['login_body_method']
login_api_body = request.GET['login_api_body']
login_response_set = request.GET['login_response_set']
# 保存数据
DB_login.objects.update_or_create(
defaults={
"api_method": login_method,
"api_url": login_url,
"api_header": login_header,
"api_host": login_host,
"body_method": login_body_method,
"api_body": login_api_body,
"set": login_response_set,
} ,
project_id = project_id
)
# 返回
return HttpResponse('success')
经过测试,这样就搞定了!!!
bug3: 登陆态项目请求报错!
最简单的请求 某度:
这个问题引起的原因是 调试登陆态接口时,这句代码引起的:
当时我们设计的时候,只设计了返回值是json的情况。当请求返回体非这个的时候,自然引发了这句报错。但是我们暂时并没有打算去用正则等方式去提取非json格式的返回体 关键字段。所以这里我们临时 给try掉。以后优化的时候我们再回来 增加其他格式的设置吧~
再看看结果显示:
好,这里我们顺手再解决这个中间是undefined的问题:
原来是我们之前漏掉了set字段:
加上 就好了,然后新项目就不会出现这个问题了。老项目我们手动改下即可。
好了,本期改的bug很多了。