社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Debendra

Debendra 最近创建的主题
Debendra 最近回复了
6 年前
回复了 Debendra 创建的主题 » 如何在django中发送带有用户唯一id和令牌的url?

发送带有唯一令牌的电子邮件。

生成令牌:

使用用户字段作为salt生成随机令牌。 可以是一个或多个字段,如名字、姓氏、用户名等。 似乎你没有大的用户群,而且复制令牌的可能性较小。

如何生成令牌?

有许多包可以帮助您生成随机令牌。 根据我的经验 uuid , secrets , hashlib 当然,这些是python内置的库。

例子:

>>> import uuid
>>> print(uuid.uuid4().hex)
'772d4c80-3668-4980-a014-aae59e34b9b9'

>>> import secrets
>>> secrets.token_hex(8)
'15653f73b28182f2'

# random token and user's field combination as salt
import uuid, hashlib
>>> first_name = user.first_name  # pull user from database
>>> salt = uuid.uuid4().hex + first_name
>>> hashlib.sha256(salt.encode('utf-8')).hexdigest()
'effc7a5b0c42bcb53f196b3a6a49065c49ee2add53aa71db89a3d4b9f4fbebcb'

似乎生成随机令牌现在已完成。

现在将您的随机令牌分别存储在您的数据库中的用户,如果您想更确定令牌不存在于数据库中,请在存储到数据库之前检查它是否存在。

唯一令牌模型示例:

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class UserUniqueToken(models.Model):
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    token = models.Charfieled(max_length=100)
    datetime = models.DateTime(default=timezone.now)  # for token expiration

如何检查令牌有效性?

很简单。

views.py :

from .models import UserUniqueToken
from django.shortcuts import get_object_or_404
from django.contrib.auth.decorators import login_required
from djano.utils import timezone
from datetime import timedelta

@login_required
def user_form(request, token):
    user_token = get_object_or_404(UserUniqueToken, token=token)  # get object or throw 404
    if not user_token.user_id == request.user.id:  # check token belongs to the user 
        # do something
    time_now = timezone.now()  # get current time
    if user_token.datetime > (time_now - timedelta(hours=2)):  # check if stored time exceeds 2 hours
          # do something with expired token
    return render(.............)

urls.py :

from .views import user_form

urlpatterns = [
        path('form/<string:token>', user_form, name='user-form'),
]

我想你明白要点了。

6 年前
回复了 Debendra 创建的主题 » 在django数据库中插入foregin键

我在上面的注释中指定了,您有3个字段 forms.py 4个字段 models.py 你指定了所有 fields 在字段上使用 表单 .

变化 表单 .

class AddNetworkDevice(forms.ModelForm):
     vendor = forms.CharField(required=True, label='Proizvajalec', max_length=100)
     product = forms.CharField(required=True, label='Produkt', max_length=100)
     version = forms.CharField(required=False, label='Verzija', max_length=50)

    class Meta:
         model = NetworkDevices
         fields = ('vendor', 'product', 'version')  # here is your problem

也可以按排除字段 exclude = ('fields') 根据@Daniel Roseman的回答。