【发布时间】:2020-11-23 14:39:04
【问题描述】:
今天我有这个问题:
我用 Django 框架编写了一个 Sign-in Sing-out Web 应用程序。
当用户登录时,他会被重定向到索引页面。在那里,他可以看到其他用户的“帖子”,并且可以选择喜欢“帖子”。当单击like 按钮时,用户将被注销,并且根本无法访问like 视图。谁能告诉我这是为什么?
我将在下面提供一些代码。如果还不够,这里是我的项目 github:https://github.com/palm-octo-chainsaw/the-end
主 url.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('core.urls', namespace='core')),
path('accounts/', include('accounts.urls', namespace='accounts_app')),
path('djrichtextfield/', include('djrichtextfield.urls')),
]
core.views.py
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login
from core.models import Core
from django.contrib.auth.models import User
def home(req):
ctx = {
'posts': Core.objects.all(),
}
return render(req, 'pages/index.html', ctx)
@login_required(login_url='accounts_app:login')
def likes(req):
if req.method == 'POST':
if req.user:
return redirect('core:home')
def create(req):
pass
core.urls.py
from django.urls import path, include
from core.views import home, likes, create
app_name = 'core'
urlpatterns = [
path('', home, name='home'),
path('like/', likes, name='like'),
path('create/', create, name='create')
]
accounts.views.py
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login, logout
from accounts.forms import RegisterUserForm, LoginForm
def sign_up(req):
if req.method == 'POST':
form = RegisterUserForm(req.POST)
if form.is_valid():
user = form.save()
login(req, user)
return redirect('core:home')
elif req.method == 'GET':
form = RegisterUserForm()
ctx = {
'form': form
}
return render(req, 'registration/sign_up.html', ctx)
def login_view(req):
if req.method == 'POST':
form = LoginForm(data=req.POST)
if form.is_valid():
user = form.get_user()
login(req, user)
return redirect('core:home')
elif req.method == 'GET':
form = LoginForm()
ctx = {
'form': form
}
return render(req, 'registration/login.html', ctx)
def logout_view(req):
if req.method == 'POST':
print('++++++++++++++++++++')
print(req)
logout(req)
return redirect('accounts_app:login')
accounts.urls.py
from django.contrib import admin
from django.urls import path
from accounts.views import sign_up, logout_view, login_view
app_name = 'accounts_app'
urlpatterns = [
path('sign_up/', sign_up, name='sign-up'),
path('login/', login_view, name='login'),
path('logout/', logout_view, name='logout')
]
模板:
{% include "pages/base.html" %}
{% block content %}
{% if user.is_authenticated %}
{% for post in posts %}
<main role="main" class="container">
<div class="jumbotron">
<h1>{{ post.username }}</h1>
<h4>{{ post.content|safe }}</h4>
<form action="{% url 'core:like' %}" method="POST">
{% csrf_token %}
<button class="btn btn-primary">{{ post.likes }}</button>
</form>
</div>
</main>
{% endfor %}
{% endif %}
{% endblock content %}
导航栏:
<nav class="navbar navbar-expand-sm bg-dark navbar-dark mb-4">
<div class="navbar-collapse collapse justify-content-between">
<ul class="navbar-nav mg-auto">
<li class="nav-item active">
<a class="navbar-brand ml-4" href="{% url 'core:home' %}">
<h2>YASM</h2>
</a>
</li>
</ul>
<ul class="navbar-nav mg-auto">
<li class="nav-item">
<h3>Welcome {{ user }} to YASM!</h3>
</li>
</ul>
<ul class="navbar-nav mg-auto">
<li>
<a href="{% url 'core:create' %}">Create</a>
</li>
<li class="nav-item dropdown">
<div class="text-center">
<a class="nav-item active navbar-brand" href="#" id="navbarDropdownMenuLink">
<h3>{{ user.username }}</h3>
</a>
</div>
<div class="dropdown-menu dropdown-menu-right text-center" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">Action</a>
<form action="{% url 'accounts_app:logout' %}" method="POST">
{% csrf_token %}
<input class="dropdown-item" type='submit' value="Logout" />
</div>
</li>
</ul>
</div>
</nav>
如果您需要更多信息,请写在下面或查看提供的 github。
提前感谢您的帮助! :)
【问题讨论】:
-
可以分享一下放点赞按钮的模板代码吗?
-
我刚刚编辑了这个问题。很抱歉给您带来不便。
标签: python django django-views django-forms django-templates