django从其他python脚本上载文件

django从其他python脚本上载文件,django,python-requests,Django,Python Requests,我想从脚本中将文件从客户端保存到django project server的数据库。我尝试在django项目中使用一个模型和一个视图,在另一个python脚本中使用post请求,但它保持返回403错误,并且不将文件和数据保存到数据库中 models.py: class ScreenRecord(models.Model): record = models.FileField(default='output.avi', upload_to='records') wr

我想从脚本中将文件从客户端保存到django project server的数据库。我尝试在django项目中使用一个模型和一个视图,在另一个python脚本中使用post请求,但它保持返回403错误,并且不将文件和数据保存到数据库中

models.py:

class ScreenRecord(models.Model):
        record = models.FileField(default='output.avi', upload_to='records')
        writeTime = models.DateTimeField(auto_now_add=True)
        user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
views.py:

def getscreenrecords(request):
    user = User.objects.filter(username=request.POST.get('user')).first()
    k = ScreenRecord(record=request.FILES.get('record'), user=user)
    k.save()
    return HttpResponse('success ' + request.GET.__getitem__('user'))
url.py:

from . import views

urlpatterns = [
    path('screenrecords/', views.getscreenrecords, name='getscreenrecords'),
]
要发送文件的python脚本:

url = 'http://127.0.0.1:8000/send/screenrecords/'
files = {'record': open('output.avi','rb')}
values = {'user': 'newUser'}
r = requests.post(url, files=files, data=values)
print(r)

我的代码出了什么问题,或者有没有更好的方法?

默认情况下,Django在POST请求中需要CSRF令牌


查看有关如何在请求中使用它的更多信息。

您需要将csrf_令牌与在js中传递的数据一起传递,如果您是在Django项目中执行此操作,下面是一个示例代码

 <script>
    var token = '{{csrf_token}}';

    $("#id_username").change(function () {
      console.log($(this).val());
      var form = $(this).closest("form");
      $.ajax({
        headers: { "X-CSRFToken": token },
        url: form.attr("data-validate-username-url"),
        data: form.serialize(),
        dataType: 'json',
        success: function (data) {
          if (data.is_taken) {
            alert(data.error_message);
          }
        }
      });

    });
  </script>

var-token='{csrf_-token}}}';
$(“#id_用户名”)。更改(函数(){
log($(this.val());
var form=$(this).closest(“form”);
$.ajax({
标头:{“X-CSRFToken”:token},
url:form.attr(“数据验证用户名url”),
数据:form.serialize(),
数据类型:“json”,
成功:功能(数据){
如果(数据已获取){
警报(数据错误消息);
}
}
});
});

此函数的“屏幕记录”在哪里?尝试url该url如下所示:路径('screenrecords/',views.getscreenrecords,name='getscreenrecords')/send/getscreenrecords返回404错误这应该与CSRF有关。您可以共享您的URL.py文件吗