SQL-инъекция после удаления всех одинарных кавычек и тире

Это мой второй пост на SO, а также мой второй пост на Django - будьте осторожны.

Я работаю на простой модели пользователя. Пользователи должны иметь возможность зарегистрироваться на сайте, и после регистрации они должны иметь возможность изменять настройки своей учетной записи при входе в систему. Однако если я сделаю следующее, пользователи увидят огромную форму со всеми видами информации, которую я не хочу, чтобы они редактировали:

views.py

from django.shortcuts import render_to_response, get_object_or_404
from django.core import urlresolvers
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import UserChangeForm

@login_required 
def settings( request, template_name = 'accounts/settings.html' ):
    """
    Processes requests for the settings page, where users
    can edit their profiles.
    """
    page_title = 'Account Settings'
    if request.method == 'POST':
        postdata = request.POST.copy()
        form = UserChangeForm( postdata )
        if form.is_valid():
            form.save()
    else:
        form = UserChangeForm()
    title = 'Settings'
    return render_to_response( template_name, locals(), context_instance = RequestContext( request) )

Как будто этого было недостаточно, эта форма не разрешить внесение любых изменений, указав в качестве ошибки «Пользователь с таким именем пользователя уже существует». Это меня сбивает с толку - я пытаюсь сохранить UserChangeForm, так неужели она уже существует?

Я уже некоторое время искал в Интернете, пытаясь создать свои собственные пользовательские формы, на основе других вопросов , которые я видел на SO, например:

forms.py

class CustomUserChangeForm( UserChangeForm ):
    def __init__( self, *args, **kwargs ):
        super( CustomUserChangeForm, self ).__init__( *args, **kwargs )
        if self.instance and self.instance.pk:
            # Since the pk is set this is not a new instance
            self.fields['username'] = self.instance.username
            self.fields['username'].widgets.attrs['readonly'] = True

К сожалению, это не сработало. Я как бы не понимаю, что делать, поэтому любая помощь будет принята с благодарностью. Ниже приведены мои urls.py и шаблон:

urls.py

urlpatterns = patterns('appname.accounts.views',

    url(r'^settings/$', 'settings', { 
            'template_name': 'accounts/settings.html' 
        }, 'settings'
    ),
)

шаблон

{% extends "accounts/base.html" %}

{% block main %}
    

Welcome, {{ request.user.pk }}{{ request.user.username }} to accounts.templates.accounts.settings.html.

Here you can update your user settings. You can change your password here.

{% csrf_token %} {{ form.as_p }}

{% endblock %}

Заранее благодарим за любую помощь!

5
задан Community 23 May 2017 в 12:24
поделиться