我感觉像是在问这个问题,因为我确信答案很简单。尽管如此,我还是花了数小时研究和测试可能的解决方案,但还是一头雾水。
在项目harmony中,我已经编写了自己的登录页面,它位于名为users的应用程序中。
我还有一个名为your_harmony的应用程序。要超越your_harmony页面,用户需要登录。
your_harmony.html
{% if user.is_authenticated %}
<h1>{{ self.sub_title|richtext }}</h1>
You are logged in as: {{ user.username }}  
<a href="/users/logout">Click here to logout</a>
...
{% else %}
You must login to access this page. <a href="/users/login">Click here to login</a>
{% endif %}
harmony.urls
urlpatterns = [
...
url(r'your-harmony/', include('your_harmony.urls')),
url(r'^users/', include('users.urls')),
...
your_harmony.urls
urlpatterns = [
path('', views.your_harmony, name='your_harmony')
]
URL / users / login使用users / views.py显示登录表单
views.py
RETURN_FROM_LOGIN_URL = 'your-harmony'
RETURN_FROM_LOGIN_URL = 'your_harmony/your_harmony.html'
def login_view(request):
form_context = {'login_form': LoginForm,}
url = "users/login.html"
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)
url = RETURN_FROM_LOGIN_URL
else:
messages.error(request, 'Your account is not enabled!')
context = {}
else:
messages.error(request, 'Your username or password was not recognized!')
context = form_context
else:
context = form_context
return render(request, url, context)
如果我回到'your-harmony'会收到错误
TemplateDoesNotExist位于/ users / login /
您的和声
如果返回'your_harmony / your_harmony.html',我会得到页面,但没有上下文。
我该如何排序?
根据@gasman的建议,我重新阅读了Django教程。由于Tutorial Part 4状态:
您应该在成功处理POST数据后始终返回HttpResponseRedirect。本技巧并非专门针对Django;一般而言,这是一种很好的Web开发实践
因此,我更改了代码以包括此返回值,并用URL conf替换了模板路径。
views.py
RETURN_FROM_LOGIN_URL = 'your_harmony'
def login_view(request):
form_context = {'login_form': LoginForm,}
url = "users/login.html"
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 HttpResponseRedirect(reverse(RETURN_FROM_LOGIN_URL))
else:
messages.error(request, 'Your account is not enabled!')
context = {}
else:
messages.error(request, 'Your username or password was not recognized!')
context = form_context
else:
context = form_context
return render(request, url, context)
学到很多东西,值得努力