Ошибка токена Django csrf только при загрузке файла с использованием django-pwa - PullRequest
0 голосов
/ 08 октября 2019

При обновлении модели профиля пользователя с использованием формы модели в django:

Повышение csrf token missing or incorrect только с загрузкой файла.

В случае без прикрепленного файлаЯ могу обновить другие поля.

Это происходит при использовании django-pwa и serviceworker.js.

https://github.com/silviolleite/django-pwa

файл model.py:

class UserProfile(models.Model):
    user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='avatars', blank=True)
    first_name = models.CharField(blank=True, max_length=128)
    last_name = models.CharField(blank=True, max_length=128)
    birthday = models.DateField(blank=True, default='1990-12-01')
    town = models.CharField(blank=True, max_length=128)

файл forms.py:

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('avatar', 'first_name', 'last_name', 'birthday', 'town')

в файле views.py:

@method_decorator(login_required, name='dispatch')
class ProfileView(FormView):
    form_class = UserProfileForm
    template_name = 'profiles/profile.html'

    def dispatch(self, request, *args, **kwargs):
        self.username = kwargs.get('username')
        self.user = get_user_model().objects.get(username=self.username)
        self.userprofile = UserProfile.objects.get_or_create(user=self.user)[0]
        self.form = UserProfileForm({'first_name': self.userprofile.first_name,
                                     'last_name': self.userprofile.last_name,
                                     'avatar': self.userprofile.avatar,
                                     'birthday': self.userprofile.birthday,
                                     'town': self.userprofile.town)
        return super().dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        return {'userprofile': self.userprofile, 'selecteduser': self.user, 'form': self.form}

    def post(self, request, *args, **kwargs):
        return super().post(request, *args, **kwargs)

    def get_form(self, *args, **kwargs):
        return self.form_class(self.request.POST, self.request.FILES, instance=self.userprofile)

    def form_valid(self, form):
        form.save(commit=True)
        return redirect('profiles:profile', self.user.username)

в файле profile.html:

<form method="post" action="." enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.non_field_errors }}
    {% for field in form %}
        <div class="form-group">
            {{ field }}
            {{ field.errors }}
        </div>
    {% endfor %}
    <input type="submit" class="btn btn-primary" value="Update" />
</form>

и программные версии:

ubuntu 18.04
nginx 1.14.0
uwsgi 2.0.18
Django 2.2
Django-CMS 3.7
django-pwa 1.0.5

Кроме того, также в случае загрузки файла на django-cms выдается ошибка:

повышение AttributeError: 'TemporaryFileUploadHandler' object has no attribute 'file', а длина содержимого запроса равна нулю.

Я никогда не видел такой проблемы.

Что я должен проверить? Подскажите пожалуйста как решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...