我已经使用类模型创建了一个注册表。Django中的用户(参考(如下:
from Django.shortcuts import render, redirect
from django.contrib.auth.models import User
def register(request):
if request.method == 'POST':
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
confirm_password = request.POST['confirm_password']
if password == confirm_password:
# some code
user = User.objects.create_user(username=username, email=email, password=password)
user.save()
return redirect('login')
else:
return redirect('register')
return render(request, 'register.html')
我的问题:
现在我想让全名作为可选,但所有其他字段都是必需的。我还想对我的字段应用长度约束,我该怎么做?由于这是一个内置模型(classmodels.User(,我不知道如何将blank=True或对任何字段使用max_length。
此外,在使用
user.save()
保存数据之前,我希望删除输入数据末尾和开头的空格(如果有((例如,如果有人将名称输入为"abc efg">,我希望将其保存为&"abc efg&"from django.shortcuts import render, redirect from django.contrib.auth.models import User def register(request): if request.method == 'POST': form = User(request.POST or None) if form.is_valid(): username = request.POST['username'] email = request.POST['email'] password = request.POST['password'] confirm_password = request.POST['confirm_password'] if password == confirm_password: # some code user = User.objects.create_user(username=username, email=email, password=password) user.save() return redirect('login') else: return redirect('register') else: return redirect('register') return render(request, 'register.html')
但这给了我以下错误:'User' object has no attribute 'is_valid'
关于如何使字段可选/必需并设置字段的最大长度的任何想法&删除尾部空格(如果有的话(,同时使用内置的模型类模型。使用者
根据django文档,最好通过继承AbstractBaseUser来创建自己的用户模型:https://docs.djangoproject.com/en/3.1/topics/auth/customizing/#specifying-自定义用户模型在那里你可以定义什么是可选的,什么不是。
哦,当你在看的时候——也许这也值得一看django allaush。也许现在不太重要,但以后肯定会如此!还可以查看自定义表单。
您需要首先声明一个表单。如果您使用默认的django用户,那么您可以使用UserCreationForm
来验证数据:
from django.contrib.auth.forms import UserCreationForm
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST or None)
if form.is_valid():
form.save()
# rest of the code
现在,假设您想要清理从HTML表单中获得的数据,那么您可以使用clean_<field_name>
方法。要在UserCreationForm
中做到这一点,您可以覆盖它(还可以添加一些代码来展示如何自定义表单(:
class CustomUserForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
def clean_first_name(self):
return self.cleaned_data['first_name'].strip()
有关表单中的验证和清洁数据的更多信息,请参阅文档。