[Django]-Django storing anonymous user data

33👍

You can use Django’s session framework to store anonymous user data.

You can then either add a field to your Project model to hold the session_key value for anonymous users,

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"])

or simply store all the data a Project instance would have in the session

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"]}

You can retrieve the data from the session later, when creating a proper user.

13👍

Just to clarify, the below code is how implemented the solution in my case:

        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()

And in my models.py:

 class Project(models.Model):
     user = models.ForeignKey(User, null=True, blank=True)
     ...

So a user field can be null, and in this case we use the session_key to keep a track of things.

Leave a comment