Heroku 无法识别用户

Heroku not recognising users

今天设法安装了 Heroku,但似乎在 Heroku 上无法识别某些在我的本地磁盘上完美运行的功能。

在我的本地版本: 注册的用户可以通过表单发表评论。访问表单时,用户可以从下拉列表中 select 他们的名字并对特定产品发表评论。

Heroku 版本:在应用程序上注册的用户不会在评论表中列出。该列表为空。

我很高兴 post 一些代码,但不确定从哪里开始,最终会 copy/pasting 一大堆代码。

我上传有什么问题吗?

同样,本地版本运行良好。所以,一定是因为从Local到Heroku的转移

有什么指点吗?

编辑 - 浏览量

from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth import logout
from django.contrib import messages
from .models import Product, User, Venue, ProductReview
from .forms import DrinkForm, VenueForm, ReviewAdd
from django.core.paginator import Paginator
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404


#from flask import request

# Create your views here.


...
@login_required
def add_review(request, product_id):
    product = get_object_or_404(Product, pk=product_id)
    form = ReviewAdd(request.POST or None) 
    if form.is_valid():
        new_rating = form.save(commit=False)
        new_rating.product = product
        new_rating.save()
        return redirect('home')
    return render(request, 'main/add_review.html',{'form':form})

来自 SamSparx 的评论:您可以检查的另一件事是您管理部分中两种环境的用户 - 确保您没有忘记任何组成员资格或权限。

我想这就是问题所在。 Heroku 应用程序的注册用户在“身份验证和授权”部分注册,但未在“主要”部分注册。

再次查看我的本地环境,实际上我必须在代码中更改某些内容,因为所有注册的新用户也不会进入“Main”部分。

你知道我该如何解决这个问题吗?

##编辑##

下面的用户创建代码。

Views.py

from django.shortcuts import render, redirect
from .forms import RegisterForm
from django.contrib.auth import login, authenticate, logout
from django.contrib import messages
from django.http import HttpResponseRedirect

# Create your views here.
def register(response):
    if response.method == "POST":
        form = RegisterForm(response.POST)
        if form.is_valid():
            new_user = form.save()
            new_user = authenticate(username=form.cleaned_data['username'],
                                    password=form.cleaned_data['password1'],)
            login(response, new_user)
            return HttpResponseRedirect("/home")
        #return redirect("/home")
    else:
        form = RegisterForm()
    
    return render(response,"register/register.html", {"form":form})

Models.py(用户模型,以防万一)

from django.db import models
from django.contrib.auth.models import User
from decimal import Decimal
import locale
import logging


class User(models.Model):
    first_name = models.CharField('User Name', max_length=120)
    last_name = models.CharField('User LastName', max_length=120)
    email_address = models.EmailField('User Email Address')
    
    def __str__(self):
        return self.first_name+ ' ' +self.last_name

我怀疑问题出在您在 models.py 文件中定义的用户 class。 django.contrib.auth.models 中已经有一个用户 class,并且您已经将其导入到该文件中。当您在 Models.py 中创建自己的用户时,您会错过所有内置的 django 用户内容,因为它们实际上是独立的 classes。所以我怀疑尝试交替使用它们会让事情变得不稳定。

有多种方法可以处理用户。

  1. 只需使用 django 用户。如果您只需要字段和方法 here,则无需定义自己的 class。只需将其导入到您需要的位置,即可使用。综上所述,这是目前最适合您的选择。

  2. 如果您认为将来可能需要额外的字段,或者可能希望通过电子邮件字段而不是用户名进行身份验证,或者基本上更改或扩展默认用户行为,您可以创建一个与 Django 用户具有一对一关系字段的模型,或者(在文档中推荐)您可以创建一个继承自 AbstractUser 的 CustomUser 并在该模型上定义您的额外字段。

  3. 通过从 CustomBaseUser 继承(方式更复杂)从头开始构建一个

注意:不建议继承或扩展默认的 Django 用户。从 AbstractUser 继承的 CustomUser 被构建为拥有 Django User 所做的一切,并且如果你扩展它不会破坏任何其他东西。