我可以将上传到模型的文件与会话ID相关联,以便在Django中使用匿名用户吗?

时间:2020-06-16 18:18:34

标签: python django

使用我的网络应用程序,访问者应单击一个按钮,该按钮将生成一个独特的视频文件-将其存储在模型中-并将其显示给他们。

我无法理解如何将视频文件与访问者相关联,而又不让他们登录我不想做的事情。

我可以使用类似于购物车为客人工作的方式进行会话吗?

CombinedLoadStates.mediator

1 个答案:

答案 0 :(得分:1)

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

  • 在提交时执行POST请求的表单
  • 一个django视图,该视图生成由POST请求触发的视频文件
  • 该视图在创建视频后在会话中存储hashed_video_file_name
  • 如果用户重新访问该页面,请检查会话中该hashed_video_file_name的视频文件是否存在

例如:

index.html

<body>

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

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

</body>

urls.py

from views import VideoFileView

urlpatterns = [
    path('video-file/', VideoFileView.as_view(), name='video-file')
]

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