如何定义Django视图

时间:2018-07-27 07:16:03

标签: javascript python django

我正在尝试使用Django开发一个聊天机器人,并根据用户的输入,需要运行各种python脚本。

具有项目结构(如下所示),有没有办法在chatbot.js中调用news.py?

我尝试过ajax请求:

$.ajax({
  type: "POST",
  url: "news/",
  data: { }
}).done(function( o ) {
   print('success')
});

并在我的 urls.py

中定义了 news /
url('news/', getNews)

在我的视图中定义了 getNews

from artemis.static.marketdata.news import scrape

class getNews():
    scrape()

但出现 500错误,说 TypeError:object()不带参数

跟踪:

Internal Server Error: /news/
 Traceback (most recent call last):
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
        response = get_response(request)
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
    TypeError: object() takes no parameters

在这种情况下最好的方法是什么? 任何提示将不胜感激!

enter image description here

2 个答案:

答案 0 :(得分:3)

Django具有“功能”视图和“类”视图。

您正在定义<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="itemContainer" data-id="1"> Item information <input type="button" class="rename"> <input type="button" class="delete"> </div> <div class="itemContainer" data-id="2"> Item information <input type="button" class="rename"> <input type="button" class="delete"> </div>。因此,您必须选择使用“功能”视图或“类”视图。

要使用功能视图,请将“类”更改为“ def”:

class getNews()

要使用类视图,请以正确的方式定义“ getNews()”。

视图中:

from django.http import HttpResponse


def getNews(request):
    result = scrape()
    return HttpResponse(result)

在urls.py中:

from django.views import View
from django.http import HttpResponse

class NewsView(View):
   ...

   def get(self, request, *args, **kwargs):
      result = scrape()
      return HttpResponse(result)

答案 1 :(得分:1)

我认为您的课程声明有误。

class getNews(object):
    def __init__(self, *args, **kwargs):
        # continue here

    def scrape(self):
        # continue here

新型类是从object继承的,而不是从NoneType继承的。


注意:此答案解决了源代码错误,与django无关,只是python语法。

Samuel Chen的答案解决了如何在Django中创建视图。 django视图是一种新样式的类,它是从django.views.View派生的。它包含与HTTP方法相对应的方法(即getpostput等)。