Django @login_required重定向到首页

时间:2019-01-10 07:02:42

标签: django

以下代码有问题。当我在下面登录并尝试提交create.html模板时,它会将我重定向到主页(通过视图中的home函数,并且记录未保存在数据库中)。当我删除@login_required并直接导航到/ products / create时,记录将保存在数据库中。我很困惑为什么会这样。任何帮助将不胜感激

我删除了(@login_required)并直接导航到/ products / create,它运行良好。但是,每当我登录然后使用/ products / create时,记录都不会保存在数据库中

Create.html

{%extends 'base.html'%}

{%block content%}

{%if error%}
{{error}}
{%endif%}

<h2> Create </h2>
{% csrf_token %}
<form  action="create"  method="POST"  enctype="multipart/form-data">

{% csrf_token %}
Title:
<br/>
<input type="text"  name = "title"/>
<br/><br/> 
Body:
<br/>
<input type="textbox" name = "body"/>
<br/><br/>
URL:
<br/>
<input type="text" name = "url"/>
<br/><br/> 
<input type="submit" class = "btn btn-primary" value = "Add Product"/>

</form>
{%endblock%}

主url.py

from django.contrib import admin
from django.urls import path,include
from products import views

urlpatterns = [
    path('admin/',    admin.site.urls),
    path('accounts/',include('accounts.urls')),
    path('products/',include('products.urls')),
    path('',views.home,name='home'),]

子项目url.py

from django.urls import path,include
from . import views

urlpatterns = [
path('create',views.create,name='create'),] 

views.py

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.urls import path
from .models import Product
from django.utils import timezone

def home(request):
    return render(request, 'products/home.html')

@login_required    
def create(request):
    if request.method == 'POST':
        if request.POST['title'] and request.POST['body'] and request.POST['url']:
            product=Product()
            product.title = request.POST['title']
            product.body = request.POST['body']
            product.url = request.POST['url']
            product.pub_date = timezone.datetime.now()
            product.save()
            return render(request,'products/test.html',{'error':'all conditions checked'})
        else:
            return render(request,'products/test.html',{'error':'all conditions not checked'})
    else:
        return render(request, 'products/create.html',{'error':'post method not checked'})

供参考

models.py

from django.db import models
from django.contrib.auth.models import User

class Product(models.Model):
    title = models.CharField(max_length=255)
    pub_date = models.DateTimeField()
    body = models.TextField()
    url = models.TextField()
    image = models.ImageField(upload_to='images/')
    icon = models.ImageField(upload_to='images/')
    votes_total = models.IntegerField(default=1)

    def __str__(self):
        return self.title

    def summary(self):
        return self.body[:100]

    def pub_date_pretty(self):
        return self.pub_date.strftime('%b %e %Y')

*登录功能*

def login(request):
    if request.method == 'POST':
       user =     auth.authenticate(username=request.POST['username'],password=request.POST['password'])
        if user is not None:
            auth.login(request,user)
            return redirect('home')
        else:
            return render(request,'accounts/login.html',{'error':'incorrect username or password'})

    else:
           return render(request,'accounts/login.html')

0 个答案:

没有答案