我正在构建一个应用程序,它有一个独立的前端(Angular 或其他JS库)和后端(Django).为了确保发送到服务器的请求的一些安全性,我想附加一个URL参数,比如server/someurl?unique_id=Something-unique.

我将这个独特的代码存储在机器的localStorage上一段特定的时间.然而,我想在服务器端使用某种函数来设置这段代码,它不仅会生成这个随机的字母数字文本,还会根据传入的请求来验证它.

例如:

当用户打开应用程序时,它将发送一个server/setCode,它将使用这个随机生成的字符串进行响应,我将使用JS将其存储到Local Storage.

在传出请求(比方说server/getdata?someparameter=some_data&unique_id=string_from_local_storage)上,服务器可以针对生成函数进行验证,然后才处理URL的睡觉.

是否有包或模块可以帮助我实现生成和验证? 我希望我能传达我想要的东西,因为我找不到任何解决方案,除非编写函数来生成和测试我自己.

推荐答案

Django提供将满足字母数字串生成要求的功能get_random_string().您不需要任何额外的包裹,因为它在django.utils.crypto模块中.

>>> from django.utils.crypto import get_random_string
>>> unique_id = get_random_string(length=32)
>>> unique_id
u'rRXVe68NO7m3mHoBS488KdHaqQPD6Ofv'

您还可以将字符集更改为allowed_chars:

>>> short_genome = get_random_string(length=32, allowed_chars='ACTG')
>>> short_genome
u'CCCAAAAGTACGTCCGGCATTTGTCCACCCCT'

有许多其他方法可以生成唯一的ID,尽管不一定是字母数字的:

  1. uuid模块-使用uuid1uuid4生成唯一UUID,例如

    >>> import uuid
    >>> my_uuid = uuid.uuid4()
    >>> my_uuid
    UUID('8e6eee95-eae1-4fb4-a436-27f68dbcb6d7')
    >>> str(my_uuid)
    '8e6eee95-eae1-4fb4-a436-27f68dbcb6d7'
    
  2. random模块:

    >>> import random
    >>> import string
    >>> allowed_chars = ''.join((string.ascii_letters, string.digits))
    >>> unique_id = ''.join(random.choice(allowed_chars) for _ in range(32))
    >>> unique_id
    '121CyaSHHzX8cqbgLnIg1C5qNrnv21uo'
    

或者,如果你对字母表不挑剔的话:

>>> unique_id = '%32x' % random.getrandbits(16*8)
>>> unique_id
'5133d2d79ce518113474d8e9f3702638'

Django相关问答推荐

如何根据属性的 Select 对查询集进行排序

如何在管理页面创建实例时只在ManyToManyField字段中显示超级用户

Django后端对印前判断请求未通过访问控制判断给我以下回应:否访问控制允许来源

使用自定义模型注册后,Django无法登录

Django:如何 Select 没有其他项目引用的项目?

通过 OrderingFilter 过滤平均和

错误404除主要应用程序外,HTML页面无法渲染的其他应用程序

如何在 django 中修改现有模型实例?

Django 模板中的 Handlebars.js

Django RESTful API - django-piston vs. django-tastypie

try 编辑/创建时,特定模型的 Django 管理员挂起(直到超时错误)

如何从不是 django 元素文件夹的文件夹中运行 gunicorn

手动触发 Django 邮件错误报告

django.core.exceptions.ImproperlyConfigured:请求设置 USE_I18N,但未配置设置

Django ModelChoiceField optgroup 标签

PyCharm 无法正确识别需求 - Python、Django

AssertionError: `HyperlinkedIdentityField` 需要序列化程序上下文中的请求

Django Admin:如何在内联中显示模型上定义的属性?

1 个 django 应用程序中约有 20 个模型

基于 User-Agent 更改 Django 模板