0

按下“搜索”按钮后,我在 urls.py 中重定向到 ClassView 的 as_view() 方法有一个 if 例如:

def as_view():
   if request.method == 'POST':
       //sth
   elif request.GET.get('test1') or request.GET.get('test2'):
       //sth
   else:
       form = myForm()
   return render(request, 'template.html', {'form' : form, 'arg': self.arg})

有一种奇怪的情况:在我的家用电脑上它可以工作,但在其他任何电脑上都不能。详细地说,我在服务器上有这个文件,我连接到服务器,打开服务器上配置的 virtualenv,然后让 runserver 0:port

当我在家用计算机上执行此操作时,一切正常,但是如果我从另一台计算机连接到 http://sererIP:port,请按执行方法 as_view() 的“搜索”按钮,它会在代码中出现此“其他”然后表单被初始化,但返回渲染没有给我任何东西,只有白页。当我签入服务器输出时,我得到了

[07/May/2013 05:54:33] "POST / HTTP/1.1" 405 0

红色。

从笔记本电脑连接到服务器并制作 runserver 0:port 后,即使在这台笔记本电脑上我也遇到了同样的问题。我尝试从家用计算机连接测试,但我也得到了白页。

4

2 回答 2

1

as_view()基于类的视图不应该返回一个 http 响应,而是一个可调用的函数......如果你想发送一个GET请求的响应,添加一个get方法到你的视图类:

class MyView(View):
    def get(request):
        # return your http response here

如果你想稍微浏览一下 Django 的基于类的视图,这里有一个很好的文档

于 2013-05-07T11:21:39.907 回答
0

为什么不使用 Django FormView?这是文档

from django.views.generic.edit import FormView

class MyFormView(FormView):
    form_class = myForm
    template_name = 'my_template.html'
    success_url = '/thanks/'

    def get_context_data(self, **kwargs):
        #This is you GET
        return super(MyFormView. self).get_context_data(**kwargs)

    def form_valid(self, form):
        #This is after the post, when the form is valid
        return super(MyFormView, self).form_valid(form)

    def form_invalid(self, form):
        #This is after the post, when the form is invalid
        return super(MyFormView, self).form_invalid(form)

您可以使用get_succes_url()在某处重定向的方法。

我希望这会有所帮助。

于 2013-05-07T13:05:58.213 回答