【问题标题】:HttpResponse object errorHttpResponse 对象错误
【发布时间】:2012-08-23 15:42:59
【问题描述】:

我收到视图 registration.views.login 没有返回 HttpResponse 对象的错误。

我正在制作一个登录应用程序,我希望当我点击登录按钮时,主页会显示给我。

当我按照给定的方式运行 view.py 时,我收到 Page not found localhost:8000/registration/home.html

的错误
from django.template import  loader
from django.shortcuts import render
from registration.models import Registration
from django.http import HttpResponse
from django.template import RequestContext


def login(request):
    t = loader.get_template('registration/login.html')

    return render(request, 'registration/login.html')

urls.py文件如下:

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

    urlpatterns = patterns('',
        url(r'^polls/$', 'polls.views.index'),
        url(r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'),
        url(r'^polls/(?P<poll_id>\d+)/results/$', 'polls.views.results'),
        url(r'^polls/(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
        url(r'^admin/', include(admin.site.urls)),
        url(r'^registration/$', 'registration.views.login'),

当我尝试运行 view.py 时:

from django.template import  loader
from django.shortcuts import render
from registration.models import Registration
from django.http import HttpResponse
from django.template import RequestContext

def login(request):
   t = loader.get_template('registration/login.html')
   if request.method == "POST":
    username = request.POST['user_name']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
      if user.is_active:
        login(request, user)
        # success
        return render_to_response(request,'registration/login.html')

然后我收到错误 视图 registration.views.login 没有返回 HttpResponse 对象。 此 view.py 的 urls.py 文件保持不变

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    样本授权

    view.py

    def loginto(request):
        if request.method == "POST":
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(username=username, password=password)
            if user is not None:
            if user.is_active:
               login(request, user)
               return render_to_response('index1.html')
            else:
               return render_to_response('error1.html')
            else:
            return render_to_response('error2.html') 
        else:
            return render_to_response('error2.html')
    

    url.py

    url(r'^login', 'mytests.views.loginto', name='loginto'),
    

    登录.html

    <form method="POST" action="{% url loginto %}">
      Username: <input type="text" name="username" size="15" /><br />
      Password: <input type="password" name="password" size="15" /><br />
      <div align="center">
        <p><input type="submit" value="Login" /></p>
      </div>
    </form>
    

    【讨论】:

    【解决方案2】:

    您不需要在每个方法中加载模板; django 会为你解决这个问题。 Django 要求所有从urls.py 调用的方法都返回一个HttpResponse 对象。

    你的方法有很多条件永远不会到达 return 语句。例如,如果用户不活跃怎么办?如果请求不是POST怎么办?

    试试这个版本,如果任何条件失败,它会将用户重定向回注册页面:

    def login(request):
       # t = loader.get_template('registration/login.html') - not needed
       if request.method == "POST":
        username = request.POST.get('user_name')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user is not None:
          if user.is_active:
            login(request, user)
            # success
            return render(request,'registration/login.html')
          else:
            # user was not active
            return redirect('registration/')
        else:
            # not a valid user
            return redirect('registration/')
       else:
           # URL was accessed directly
           return redirect('registration/')
    

    【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2020-04-17
    相关资源
    最近更新 更多