Python 我可以将上传到模型的文件与Django中匿名用户的会话id相关联吗?

Python 我可以将上传到模型的文件与Django中匿名用户的会话id相关联吗?,python,django,Python,Django,使用my web app,访问者应单击一个按钮,生成一个独特的视频文件(存储在模型中)并向他们显示 我很难理解如何在不让访问者登录的情况下将视频文件与访问者关联,我不想这样做 我是否可以像购物车为客人服务一样,在会议上这样做 models.py from django.db import models from django.conf import settings import hashlib from hashid_field import HashidAutoField class

使用my web app,访问者应单击一个按钮,生成一个独特的视频文件(存储在模型中)并向他们显示

我很难理解如何在不让访问者登录的情况下将视频文件与访问者关联,我不想这样做

我是否可以像购物车为客人服务一样,在会议上这样做

models.py

from django.db import models
from django.conf import settings
import hashlib 
from hashid_field import HashidAutoField


class VideoUpload(models.Model):
    hashed_video_file_name = HashidAutoField(primary_key=True)
    name = models.CharField(max_length=40)
    videofile= models.FileField(upload_to='videos/', null=True)

您可以通过以下方式创建此功能:

  • 提交后进行POST请求的表单
  • 生成POST请求触发的视频文件的django视图
  • 该视图在创建视频后将散列的视频文件名存储在会话中
  • 如果用户重新访问该页面,请检查会话中是否存在该哈希视频文件名的视频文件
例如:

index.html

<body>

    <form method="POST" action="{% url 'video-file' %}">
        <input type="submit"/>
    </form>

    {% if video %}
       <video>
       // render video here
       </video>
    {% endif %}

</body>
views.py

from models import VideoUpload
from video_generator import generate_video_file

class VideoFileView(View):
    def get(self, request):
        context = {}

        try:
            hashed_video_file_name = request.session['video_file']
            video_upload = VideoUpload.objects.get(hashed_video_file_name=hashed_video_file_name)
            context = {
                'video': video_upload.videofile
            }
        except KeyError, VideoUpload.DoesNotExist:
            pass

    #   this html also contains form
        return render(request, 'index.html', context=context)

    def post(self, request):
        # here your magic to generate video_file
        video_file = generate_video_file()

        video_upload = VideoUpload.objects.create(videofile=video_file, name='name')
        request.session['video_file'] = video_upload.hashed_video_file_name
        return render(request, 'index.html', {'video': video_upload.videofile})

你可以存储他们的IP地址。但是,如果匿名用户正在上载这些文件,您打算如何准确地跟踪它们?您可以使用cookie进行跟踪。视频由python脚本生成,该脚本由视图中的按钮单击触发。您会采取哪种方法?谢谢!我正在研究这一点,并试图适应我现有的(混乱的)代码。第一次使用基于类的视图。
video\u generator
模块只是一个示例名称是吗?是的,这是一个示例名称,用于说明您可能需要导入generate\u video\u file()方法。这种方法也是一个例子。不知道如何将我现有的查看功能(showvideo和video\u upload\u detail\u page)引入VideoFileView。为上下文问题添加了代码。有可能吗?抱歉,代码太乱了-是根据本教程改编的,不知道如何在不破坏东西的情况下去掉前端表单部分(我不需要)。希望整理一下,因为我理解得更好。@flexkwando你现在添加了一个视频上传表单,而之前你总是说“生成一个独特的视频文件”。用户是上传视频还是你为他们制作视频?很抱歉造成混淆。我像以前一样为他们制作视频。视频上传表单是因为我不知道如何在没有表单的情况下将视频上传到模型,所以我使用了这种方法。我不想视频上传的形式的一部分,但它的纠结到我的代码在时刻。
from models import VideoUpload
from video_generator import generate_video_file

class VideoFileView(View):
    def get(self, request):
        context = {}

        try:
            hashed_video_file_name = request.session['video_file']
            video_upload = VideoUpload.objects.get(hashed_video_file_name=hashed_video_file_name)
            context = {
                'video': video_upload.videofile
            }
        except KeyError, VideoUpload.DoesNotExist:
            pass

    #   this html also contains form
        return render(request, 'index.html', context=context)

    def post(self, request):
        # here your magic to generate video_file
        video_file = generate_video_file()

        video_upload = VideoUpload.objects.create(videofile=video_file, name='name')
        request.session['video_file'] = video_upload.hashed_video_file_name
        return render(request, 'index.html', {'video': video_upload.videofile})