以面向对象方式获取?格式的URL中的参数时,函数定义加self程序报错

来源:2-6 项目练习-Django的View、路由参数实践

幕布斯742172

2020-04-04

如果以面向对象的形式构造应用views.py,若在get_message函数增加self参数,程序会报错如下:
TypeError at /e2_app/message
get_message() missing 1 required positional argument: 'request’
Request Method:
GET
Request URL:
http://127.0.0.1:8000/e2_app/message?info=txx
Django Version:
3.0.4
Exception Type:
TypeError
Exception Value:
get_message() missing 1 required positional argument: 'request’
Exception Location:
D:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\base.py in _get_response, line 113
Python Executable:
D:\ProgramData\Anaconda3\python.exe
Python Version:
3.7.4
class E2Views(View):
def get_message(**this,**request):
msg = request.GET.get(‘info’)
print(msg)
return HttpResponse(‘message:{0}’.format(msg))
但去除self参数后,就正常了

有点想不明白,烦请老师方便时解答!

写回答

1回答

deweizhang

2020-04-05

你这个getmesessge不是标准get函数 def get(self,request): 你使用的是自定义函数的方式 如果你对面向对象与pythonoop开发足够了解 那么可以。但我感觉似乎还不是。建议你跟着课程来走。另外课程使用的是python3.5或3.6
django版本是2.1.2 不同的版本需要考虑各种不兼容性,为了课程顺利学习 希望可以和课程相同的版本

0
1
幕布斯742172
感谢老师的回复,没想到会这么快O(∩_∩)O又仔细看了一下您的实现,发现您使用了django基类View.as_view()去自动判断请求。之前一直不理解为什么urls.py中调用的是as_view(),但视图类中却用的是get,现在明白啦。再次感谢!O(∩_∩)O
2020-04-05
共1条回复

Django入门到进阶-适合Python小白的系统课程

入门Django的同时,让你形成更贴近实际工作的Python Web开发知识体系

1117 学习 · 468 问题

查看课程