今天設法安裝了 Heroku,看起來在我的本地磁盤上完美運行的某些功能在 Heroku 上無法識別。
在我的本地版本上:注冊的用戶可以通過表單發表評論。訪問表單時,用戶可以從下拉串列中選擇其姓名并對特定產品發表評論。
在 Heroku 版本上:在應用程式上注冊的用戶未在評論表中列出。該串列為空。
我很高興發布一些代碼,但不確定從哪里開始,最終會復制/粘貼一大塊代碼。
我上傳有什么問題嗎?
同樣,本地版本作業得很好。所以,這一定是由于從 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 應用程式上的注冊用戶在“身份驗證和授權”部分注冊,但不在“主要”部分注冊。
再次查看我的本地環境,實際上我必須更改代碼中的某些內容,因為所有注冊的新用戶也不會進入“主要”部分。
你知道我怎么能解決這個問題嗎?
##編輯##
用戶創建代碼如下。
視圖.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
uj5u.com熱心網友回復:
我懷疑問題是您在 models.py 檔案中定義的 User 類。django.contrib.auth.models 中已經有一個 User 類,并且您已經將它匯入到該檔案中。當您在 Models.py 中創建自己的用戶時,您會錯過所有內置的 django User 東西,因為它們實際上是獨立的類。所以我懷疑試圖互換使用它們會讓事情變得不穩定。
有多種方法可以處理用戶。
只需使用 django 用戶。如果您只需要這里的欄位和方法,則無需定義自己的類。只需將其匯入您需要的地方,就可以使用了。從我上面看到的情況來看,這是目前最適合您的選擇。
如果您認為將來可能需要額外的欄位,或者可能希望通過電子郵件欄位而不是用戶名進行身份驗證,或者基本上更改或擴展默認用戶行為,您可以創建一個具有一對一關系欄位的模型Django 用戶,或者(在檔案中推薦)您可以創建一個繼承自AbstractUser的 CustomUser并在該模型上定義您的額外欄位。
通過從 CustomBaseUser 繼承從頭開始構建一個(更復雜)
注意:不建議繼承或擴展默認的 Django 用戶。從 AbstractUser 繼承的 CustomUser 被構建為擁有 Django User 所做的一切,并且如果你擴展它也不會破壞其他任何東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/486269.html
下一篇:HerokuFetchError:https://some-random-api.ml/meme處的無效json回應正文原因:意外的令牌<在JSON中的位置0
