django3 The view account.views.register didn‘t return an HttpResponse object.错误的解决办法

一、使用参考内容

参考的书籍《python精通 从入门到实践》    19章

用的是第一版书Django==1.11    京东阅读app购买的第二版电子书  图灵社区下载了第二版的代码    

二、简要说明

       综合以上资料,我自己使用的是Django==3.2 

三、碰到的问题

(一)【login 后,跳转到account/profile  报错问题】

user/urls.py  文件中,auth.urls包含了一些常用的路径   

path('', include('django.contrib.auth.urls')), 
按住Command,点击urls,进入auth.urls代码内部,
path('login/', views.LoginView.as_view(), name='login'),
按住Command,点击LoginView,进入auth.views代码内部
注意这行代码return url or resolve_url(settings.LOGIN_REDIRECT_URL)

是在settings 里的LOGIN_REDIRECT_URL可以指定url, 官方文档说明https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-LOGOUT_REDIRECT_URL

意思就是登录成功就会进入默认的url  account/login

修改的话在settings.py  中添加代码

LOGIN_REDIRECT_URL = '/index'     # index是登录成功后跳转到页面

(二)【注册页面进入失败,提示】The view users.views.register didn't return an HttpResponse object

1)首先最重要的是检查最后两行的代码是否和if else 对齐,而不是在else内部!!!

2)原因就是不管是if  还是 else  都需要提供渲染后的页面,所以在第二版代码的基础上,else内部

return redirect('app01:index')

# 在添加下面的代码 即可
context = {'form': form}
return render(request, 'users/register.html', context)

基本上着两部分的问题困扰了很久,现在算是解决了

users/views.py文件

def register(request):
    # 注册新用户
    if request.method != 'POST':
        # 显示空的注册表单
        form = UserCreationForm()

        # 显示空表单或指出表单无效
    else:
        # 处理好填写好的表单
        form = UserCreationForm(data=request.POST)

        if form.is_valid():
            new_user = form.save()
            # 让用户自动登录,再重新定向到主页
            # authenticated_user = authenticate(username=new_user.username,
            #                                   password=request.POST['password1'],
            #                                   confirm_password=request.POST['password2'])
            login(request, new_user)
            return redirect('app01:index')
            
            # 就是添加这两行
            context = {'form': form}
            return render(request, 'users/register.html', context)
            # return HttpResponseRedirect(reverse('app01:index'))
    # 一定要检查是否和if else 对齐,不是在else 内部
    return render(request, 'registration/register.html', {'form': form})

users/urls.py文件

urlpatterns = [

    # 默认的就包有login logout
    # urls 就有login/ logout
    # Command + 单击urls就可以进入内部,查看默认的路径
    path('', include('django.contrib.auth.urls')),
    
    #  登陆页面
    # path('login/', login, {'template_name': 'registration/login.html'}, name='login'),   django 1.x的写法
    # path('login/', LoginView.as_view(template_name='registration/login.html'), name='login'),  # 2.0后的写法

    # 注销页面
    # path('logout/', views.logout_view, name='logout')

    # 注册页面
    path('registration/', views.register, name='register'),

]

settings.py文件

LOGIN_REDIRECT_URL = '/index'  # 默认: '/accounts/profile/'

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值