Dar*_*ech 25 django django-forms
我有一个django模型,它存储来自表单输入的用户和产品数据:
def ProductSelection(request, template_name='product_selection.html'):
...
if user.is_authenticated():
user = request.user
else:
# deal with anonymous user info
project = Project.objects.create(
user=user,
product=form.cleaned_data["product"],
quantity=form.cleaned_data["product_quantity"],
)
Run Code Online (Sandbox Code Playgroud)
当然,这对于经过身份验证的用户来说很好,但我也希望能够存储匿名用户项目,如果可能的话,在最终注册和验证时将它们与用户关联起来.
我的想法是创建名称= some_variable(时间戳与随机哈希串联?)的匿名用户,然后将该用户名保存在会话数据中.如果我确保该会话变量(如果存在)用于记录该用户的所有项目活动,我应该能够在注册时使用用户的真实凭据更新项目.
这过于复杂和脆弱吗?我是否有可能不必要地节省数千行数据?这个常见问题的最佳方法是什么?
任何有关这方面的指导都将非常感激.
Gon*_*alo 15
您可以使用Django的会话框架来存储匿名用户数据.
然后,您可以向Project模型添加字段以保存session_key匿名用户的值,
project = Project.objects.create(
user=request.user, # can be anonymous user
session=request.session.session_key,
product=form.cleaned_data["product"],
quantity=form.cleaned_data["product_quantity"])
Run Code Online (Sandbox Code Playgroud)
或者只是存储Project实例在会话中将拥有的所有数据
if user.is_authenticated():
project = Project.objects.create(
user=request.user,
product=form.cleaned_data["product"],
quantity=form.cleaned_data["product_quantity"])
else:
# deal with anonymous user info
request.session['project'] = {
"product": form.cleaned_data["product"],
"quantity": form.cleaned_Data["product_quantity"]}
Run Code Online (Sandbox Code Playgroud)
在创建适当的用户时,您可以稍后从会话中检索数据.
只是为了澄清一下,下面的代码就是在我的情况下如何实现解决方案:
project = Project.objects.create(
session=request.session.session_key,
# save all other fields
...
)
if request.user.is_authenticated():
project.user = request.user
else:
# make a copy of the session key
# this is done because the session_key changes
# on login/ register
request.session['key_copy'] = request.session.session_key
project.save()
Run Code Online (Sandbox Code Playgroud)
在我的models.py中:
class Project(models.Model):
user = models.ForeignKey(User, null=True, blank=True)
...
Run Code Online (Sandbox Code Playgroud)
因此,用户字段可以为null,在这种情况下,我们使用session_key来跟踪事物.
| 归档时间: |
|
| 查看次数: |
9286 次 |
| 最近记录: |