django - 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')```
解决方案
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});
推荐阅读
- performance - 从 ASP.NET WEB API 2 调用外部可执行文件时有哪些最佳实践
- ios - 是否可以预填充 AWS AppSync iOS 客户端?
- python - wx 模块缺少属性 ArtProvider
- apache-nifi - 使用 NiFi 将 CSV 转换为嵌套 JSON
- java - Vertx 池数据源 dropwizard-metrics 使用中的计数为负数
- python - 将多个变量分配给相同值的最优雅方法?
- wordpress - 使用 Wordpress 简码函数呈现 Gutenberg 块,将属性作为参数发送
- c++ - 在函数模板中使用 std::variant
- angularjs - 在 Ionic 上创建对象
- javascript - 子组件中的事件返回“未捕获的类型错误:无法读取未定义的属性“值”