在Django中使用uuid生成和存储唯一ID

时间:2017-10-29 19:39:44

标签: python mysql django uuid

我正在尝试使用python' s uuid生成一个唯一的用户ID,然后将其存储在我的mysql数据库中。 我很困惑何时应该生成ID。

这是我的forms.py

from django import forms
from django.contrib.auth.models import models
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
import uuid

class RegistrationForm(UserCreationForm):
    email = models.EmailField(required=True)
    user_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    class meta:
        model = User
        fields = (
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2'
        )

def save(self, commit=True):
    user = super(RegistrationForm, self).save(commit=False)
    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']
    user.email = self.cleaned_data['email']
    user.user_id = uuid.uuid4()

    if commit:
        user.save()

    return user

这是我的views.py

的注册部分
def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save
            return redirect('/account')

        else:
            form = RegistrationForm()

            args = {'form':form}
            return render(request, 'accounts/registration.html', args)

1 个答案:

答案 0 :(得分:0)

首先,您要做的是Extending core User model。您必须选择以下两种方法之一。我建议使用所有必要的附加字段创建一对一模型,例如您的uuid ID。

其次,代码

user_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

用于描述 models.py 中的字段(不在表单中)。如果你把它放在这里你不必考虑生成id,你已经为它设置了一个可调用的uuid4。阅读更多docs