繁体   English   中英

我需要将信息 + User.id 或用户名保存到 Django 中的数据库

[英]I need save info + User.id or username to database in Django

我在使用信息保存有关身份验证用户的信息时遇到了一些问题。 我没有一些 id,但 django 有异常。 我的 model.py

from django.contrib.auth.models import User
from django.db import models
from hashlib import md5
from django.conf import settings


# Create your models here.
class Url(models.Model):
    long_url = models.CharField(unique=True,max_length=500)
    short_url = models.CharField(unique=True, max_length=100)
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    id = models.BigAutoField(primary_key=False, null=True)

    @classmethod
    def create(self, long_url, user, id):
        tmp = md5(long_url.encode()).hexdigest()[:6]
        tmp = '127.0.0.1:8000' + '/' + tmp

        try:
            obj = self.objects.create(id=id,long_url=long_url, short_url=tmp, user=user)
        except:
            obj = self.objects.get(long_url=long_url, user=user)
        return obj

我的观点.py

from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from .forms import  UserRegistration, UserLogIn
from .models import Url
from django.http import HttpResponse
from django.contrib.auth import authenticate, login

# Create your views here.

def register(request):
    if request.method == 'POST':
        user_form = UserRegistration(request.POST)
        if user_form.is_valid():
            new_user = user_form.save(commit=False)
            new_user.set_password(user_form.cleaned_data['password'])
            new_user.save()
            return render(request, 'register.html', {'new_user': new_user})
    else:
        user_form = UserRegistration()
    return render(request, 'register.html', {'user_form': user_form})

def shorter(request):
    if request.method == 'POST':
        long_url = request.POST.get('long_url')
        obj = Url.create(long_url, User)
        return render(request, 'short.html', {
            'short_url': request.get_host() + '/' + obj.short_url[-6:]})
    return render(request, 'shorter.html')

我的 forms.py

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


class UserRegistration(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('username', 'first_name', 'email')

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError('Passwords don\'t match.')
        return cd['password2']

class UserLogIn(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

当我想保存时,我有异常字段 'id' 需要一个数字,但得到了 <class 'django.contrib.auth.models.User'>。 你能帮我解决这个例外吗?但我是 Django 的初学者,我认为这种情况很简单但不起作用。

在views.py中shorter的function更改

obj = Url.create(long_url, User)

obj = Url.create(long_url, request.user)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM