python - django 无法在基于类的 View 中使用全局变量

标签 python django django-class-based-views

我的看法是这样的

class RecordView(View):
    record_form = RecordForm
    record_files = {}
    templare = 'acquisition.html'

    def get(self, request, *args, **kwargs):
        fil = urllib.urlopen('/home/student/wwww.jpg')
        self.record_files = {'small_cover': SimpleUploadedFile('hehe.jpg', fil.read())}
        rr_form = self.record_form()
        return render(request, self.template_name, {'rr_form': rr_form,
                                            })
    def post(self, request, *args, **kwargs):
        record = RecordForm(request.POST, self.record_files)
        record.save()
        HttpResponseRedirect('/')

这里我在 get 方法中填充了 self.record_files ..但是在我发布数据后,我将 self.record_files 视为空字典。我在这里感到困惑。我该怎么做才能做到这一点。

最佳答案

在 get 和 post 之间不会维护 View 实例的状态,因此在实例上设置 record_files 不会为下一个请求保留它。您需要将该逻辑放入 dispatch 方法中,或将信息存储在用户的 session 中。

class RecordView(View):
    record_form = RecordForm
    record_files = {}
    templare = 'acquisition.html'

    # dispatch is called before deciding whether to use get() or post()
    # so any instance-level properties that require the request can go here.
    # This could even go in __init__().
    def dispatch(self, request, *args, **kwargs):
        fil = urllib.urlopen('/home/student/wwww.jpg')
        self.record_files = {'small_cover': SimpleUploadedFile('hehe.jpg', fil.read())}
        return super(RecordView, self).dispatch(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        rr_form = self.record_form()
        return render(request, self.template_name, {'rr_form': rr_form,
                                        })

    # self.record_files will be available in a get, or a post (or any valid 
    # method for that matter).
    def post(self, request, *args, **kwargs):
        record = RecordForm(request.POST, self.record_files)
        record.save()
        return HttpResponseRedirect('/')

关于python - django 无法在基于类的 View 中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28248033/

相关文章:

python - 从文件中读取

django - 在表单内应用事务原子是否正确?

django - 如何使用基于类的 View 按 Django 中相关字段的总和进行排序?

python - Django 基于类的 View 中的类变量与方法

django - 从 ForeignKey (non-self.request.user) 在 CreateView 中设置初始值

python - 如何从 tkinter 获取条目并将其打印在 txt 文档中?

python - 无法在python中将xml文件转换为csv

python - Python 3.6 (Spyder) 中的类和继承

python - 如何创建基于其他字段进行评估的 Django 模型字段?

Django 南迁移错误与 postgresql 数据库中的唯一字段