我剛開始接觸Django開發,我對所有可以實作同樣東西的方式感到非常困惑和迷茫。(也可能是我太笨了)現在我腦子里的東西都很亂(基于類的表單? 基于類的視圖?基于功能的視圖和基于類的表單?系結到表單類的自定義HTML表單,然后等等等等......)
。到目前為止,這些是我所看到的所有交織在一起的選項,它們讓我非常困惑:
普通的HTML表單,然后被系結到視圖中的Form實體,以便進行驗證(?) 。每個視圖都是自定義的。(我最喜歡這個,因為我覺得在模板中使用{{ form }}沒有任何樂趣,再加上這個似乎對我來說很直接)當你以這種方式實作表單時,是否不使用forms.py?
include('django.contrib.auth.urls')用于自定義模板的登錄(其中你使用{{ form }},然后使用其他東西用于注冊,因為沒有相同的內置東西用于注冊
UserCreationForm但如果你想添加更多的欄位,你必須以某種方式擴展它(為什么有內置的視圖用于認證,而不是用于用戶創建?
如果您想將其與自定義用戶模型一起使用,則可使用基于類的自定義表單
。
如果在注冊時有與用戶相關的額外資料,我應該使用什么?Django開發人員一般最常使用的方式是什么?
如果在注冊時與用戶相關的額外資料,應該使用什么?
uj5u.com熱心網友回復: 在我看來,實作注冊和登錄的最常見方式是通過Django的內置函式,如: 實際上,我有一個模板,當我開始一個新專案時,我想添加一個登錄和注冊頁面,這里的鏈接 我希望這有幫助;) uj5u.com熱心網友回復: 我知道的方法是使用內置的Django contrib模塊,如 uj5u.com熱心網友回復: 你已經發布了一個詳細的問題,讓我們現在集中討論這個問題,我們可以從這里開始 你的最佳選擇是參考Django檔案,它肯定會給你最好的建議。所以檔案這里閱讀 如果你正在開始一個新的專案,強烈建議你設定一個自定義的用戶模型,即使默認的用戶模型對你來說已經足夠。這個模型的行為與默認的用戶模型相同,但是如果有需要,你將能夠在未來對其進行自定義。
所以你必須創建一個自定義用戶模型。你如何做到這一點?好吧,你使用AbstractUser。
注意 - 不要運行 migrate 命令來配置資料庫。在創建自定義用戶模型之后再進行遷移。
這包括4個步驟 像這樣更新settings.py 創建一個新的CustomUser模型。讓我們使用一個新的自定義欄位。說年齡 - users/models.py 為UserCreationForm和UserChangeForm創建新的表單 請記住我們與新的CustomUser模型互動的兩種方式。
因此,我們為這一功能更新了兩個內置表單:
因此 - 在用戶應用程式中創建一個新的檔案,名為 forms.py - users/forms.py 這里--Meta類用于通過設定模型為CustomUser來覆寫默認欄位。
最后 更新admin.py檔案,因為Admin與默認的User模型緊密相連 -> users/admin.py 現在遷移配置你的資料庫,創建一個新的超級用戶并進行測驗。
希望這能為你提供一個如何前進的起點。我相信你的其他疑問最終會得到解決。
標籤:
如果我說得不太明白,我是個開發新手,每次都會因為有太多的方法來做同樣的事情而不知所措。
include('django.contrib.auth.urls')和UserCreationFormUserCreationForm來自django.contrib.auth.forms的signup功能和AuthenticationForm的login。下面是我在views.pyfrom django.contrib.auth.forms import (
AuthenticationForm,
UserCreationForm,
)
from django.contrib.auth import login as auth_login,
@require_http_methods(['GET', 'POST']/span>)
def signup(request)。
if request.user.is_authenticated:
return redirect(' articles:index')
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid()。
user = form.save()
auth_login(request, user)
return redirect('arts:index')
else:
form = UserCreationForm()
背景關系 = {
'form': form,
}
return render(request,'account/signup.html', context)
@require_http_methods(['GET','POST'))
def login(request)。
if request.user.is_authenticated:
return redirect('arts:index')
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid()。
auth_login(request, form.get_user())
return redirect(request.GET.get('next') or ' articles:index')
else:
form = AuthenticationForm()
背景關系 = {
'form':form,
}
return render(request, 'accounts/login.html'/span>, context)
INSTALLED_APPS = [
#Built In Apps[/span]。
...
#Custom Apps[/span]。
' users.apps.UsersConfig',
]
...
# At the end of settings.py file
AUTH_USER_MODEL = ' users.CustomUser'
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser)。
age = models.PositiveIntegerField(null=True,blank=True)
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm)。
class Meta(UserCreationForm)。
model = CustomUser UserCreationForm.Meta.field ('age', )
class CustomUserChangeForm(UserChangeForm)。
class Meta:
model = CustomUserUserChangeForm.Meta. fields
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser
class CustomUserAdmin(UserAdmin)。
add_form = CustomUserCreationForm(UserAdmin)
form = CustomUserChangeForm: add_form = CustomUserCreationForm.
模型 = CustomUserCustomUser, CustomUserAdmin)
