首页 > 解决方案 > django - 只有在提交表单后才能访问上传页面。直接输入上传url应该不行

问题描述

仅在提交表单后才允许上传文件。否则不能访问上传 url。

用户登录后,直接访问上传url。我该如何限制这个?这将为同一个表单创建多个文件上传条目

模型.py

class uploadmeta(models.Model):
    path = models.ForeignKey(Mdform, verbose_name="ID", on_delete=models.PROTECT)
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    datafile = models.FileField(upload_to=get_upload_folder, verbose_name="Dataset", validators=[validate_file_extension])

    def get_absolute_url(self):
        return reverse('file_list', kwargs={'pk': self.pk})

视图.py

        if request.user.is_authenticated:

                if request.method == 'POST':
                        form = uploadmetaform(request.POST, request.FILES)

                        if form.is_valid():
                                path = form.cleaned_data['path']
                                if uploadmeta.objects.filter(path=path).exists():
                                        user = form.cleaned_data['user']
                                        datafile = form.cleaned_data['datafile']
                                        context = {
                                        'path': path,
                                        'user': user,
                                        'datafile': datafile  
                                        }
                                        template = loader.get_template('nameexists.html')
                                        return HttpResponse(template.render(context, request))
                                else:
                                        user = form.cleaned_data['user']
                                        datafile = form.cleaned_data['datafile']
                                        path = dict(form.fields['path'].path)[path]
                                        print(path)
                                        b = form(path=path, user=user, datafile=datafile)
                                        b.save()
                                        context = {
                                        'path': path,
                                        'user': user,
                                        'datafile': datafile
                                        }
                                        template = loader.get_template('thankyou.html')
                                        return HttpResponse(template.render(context, request))
                        else:
                               form = uploadmetaform()

                        return render(request, 'uploaddata.html', {'form': form})
        else:
                return render(request, 'home.html')```

标签: django

解决方案


from django.shortcuts import render
from basicform.forms import BasicForm
from django.template import loader
from django.http import HttpResponse
from basicform.choices import * 

from basicform.models import BasicFormModel


def responseform(request):
     if request.method == 'POST':
        basicForm = BasicForm(request.POST)

        if basicForm.is_valid():
            name = basicForm.cleaned_data['name']
            if BasicFormModel.objects.filter(name=name).exists():
                favourite_color = basicForm.cleaned_data['favourite_color']
                choices = basicForm.cleaned_data['choices']    
                context = {
                'name': name,
                'favourite_color': favourite_color,
                'choices': choices
                }
                template = loader.get_template('nameexists.html')
                return HttpResponse(template.render(context, request))
            else:
                favourite_color = basicForm.cleaned_data['favourite_color']  
                choices = basicForm.cleaned_data['choices'] 
                print("cleanded choices="+choices)
                choices = dict(basicForm.fields['choices'].choices)[choices]
                print(choices)
                b = BasicFormModel(name=name, favourite_color=favourite_color, choices=choices)
                b.save()
                context = {
                'name': name,
                'favourite_color': favourite_color,
                'choices': choices
                }
                template = loader.get_template('thankyou.html')
                return HttpResponse(template.render(context, request))


     else:
         form = BasicForm()

     return render(request, 'responseform.html', {'form':form});

推荐阅读