一、使用参考内容
参考的书籍《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/'