Измените request.query_params в django [duplicate]

Я попробовал вашу функцию, и была небольшая ошибка: если какое-то окончательное значение «r» имеет только 1 цифру, результат возникает, например: «a0a0a», когда правое значение - «0a0a0a», например. Я просто быстро исправил это, добавив это вместо вашего возвращения:

var rStr = (r.toString(16).length < 2)?'0'+r.toString(16):r.toString(16);
var gStr = (g.toString(16).length < 2)?'0'+g.toString(16):g.toString(16);
var bStr = (b.toString(16).length < 2)?'0'+b.toString(16):b.toString(16);

return (usePound?"#":"") + rStr + gStr + bStr;

Возможно, это не так приятно, но это делает работу. Отличная функция, BTW. Только то, что мне было нужно. :)

38
задан dan-klasson 21 September 2013 в 08:53
поделиться

3 ответа

Вы не должны использовать GET для отправки имени пользователя и пароля, это плохая практика (поскольку она отображает информацию о панели URL и может представлять угрозу безопасности ). Вместо этого используйте POST. Кроме того, я предполагаю, что вы пытаетесь аутентифицировать своих пользователей, и кажется, что вы делаете слишком много работы (создаете новое промежуточное ПО), чтобы иметь дело с чем-то, что полностью встроено, чтобы взять пример из docs :

from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
        else:
            # Return a 'disabled account' error message
    else:
        # Return an 'invalid login' error message.

Мне очень нравится использовать login_required decorator , очень простой в использовании. Надеюсь, что это поможет

4
ответ дан Community 3 September 2018 в 15:17
поделиться

Удалить неизменяемость:

if not request.GET._mutable:
   request.GET._mutable = True

# now you can spoil it
request.GET['pwd'] = 'iloveyou'
29
ответ дан laffuste 3 September 2018 в 15:17
поделиться

django.http.QueryDict объекты, которые назначены request.GET и request.POST, неизменяемы.

Вы можете преобразовать его в изменяемый экземпляр QueryDict, скопировав его:

request.GET = request.GET.copy()

После этого вы сможете изменить QueryDict:

>>> from django.test.client import RequestFactory
>>> request = RequestFactory().get('/')
>>> request.GET
<QueryDict: {}>
>>> request.GET['foo'] = 'bar'
AttributeError: This QueryDict instance is immutable
>>> request.GET = request.GET.copy()
<QueryDict: {}>
>>> request.GET['foo'] = 'bar'
>>> request.GET
<QueryDict: {'foo': 'bar'}>

. Это было целенаправленно спроектировано таким образом, что ни одному из компонентов приложения не разрешено редактировать исходные данные запроса, поэтому даже создание неизменяемого QueryDict снова нарушит эту конструкцию. Я бы по-прежнему предлагал вам следовать рекомендациям и назначать дополнительные данные запроса непосредственно на объект request в вашем промежуточном программном обеспечении, несмотря на то, что он может заставить вас редактировать ваши источники.

63
ответ дан LostMyGlasses 3 September 2018 в 15:17
поделиться