django: модель для хранения временных файлов - PullRequest
1 голос
/ 16 августа 2010

В некоторых случаях пользователи могут отправлять временные файлы на мой сервер. Я хотел бы отслеживать эти временные файлы (поскольку они используются позже, и я хотел бы знать, когда я могу удалить их - или когда они не использовались и могут быть собраны). Какую модель я должен использовать для этого? Я отправлю эти файлы, используя AJAXiframe).

EDIT

Если я использую в модели FileField, как мне обработать загрузку файла? Не могли бы вы показать пример кода, как моя функция должна поместить файл с request.FILES в FielField.

1 Ответ

3 голосов
/ 16 августа 2010

Способ хранения файлов не зависит от того, поступают ли они через AJAX. Вашему представлению все равно нужно будет обрабатывать данные составной формы и сохранять их в вашей БД и файловой системе сервера, как и любой другой загруженный файл в Django.

Что касается модели, как на счет этого?

class TemporaryFileWrapper(models.Model):
   """
   Holds an arbitrary file and notes when it was last accessed
   """
   uploaded_file = models.FileField(upload_to="/foo/bar/baz/")
   uploading_user = models.ForeignKey(User)
   uploaded = models.DateTimeField(blank=True, null=True, auto_now_add=True)          
   last_accessed = models.DateTimeField(blank=True, null=True, 
                                        auto_now_add=False, auto_now=False)


   def read_file(record_read=True):
      #...some code here to read the uploaded_file
      if record_read:
          self.last_accessed = datetime.datetime.now()
          self.save()

Для базовой обработки загрузки файлов см. Официальную документацию , но там, где в примере есть метод handle_uploaded_file (), вам нужен код, который создает объект TemporaryFileWrapper, что-то , например, в зависимости от ваших потребностей:

....
form = ProviderSelfEditForm(request.POST, request.FILES) #this is where you bind files and postdata to the form from the HTTP request
if form.is_valid():
     temp_file_wrapper = TemporaryFileWrapper()
     temp_file_wrapper.uploaded_file = 
                       form.cleaned_data['name_of_file_field_in_your_form']
     temp_file_wrapper.uploading_user = request.user #needs an authenticated user
     temp_file_wrapper.save()

     return HttpResponseRedirect('/success/url/')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...