\-\.\/\[\]\\ **always** need escaping
\*\+\?\)\{\}\| need escaping when **not** in a character class- [a-z*+{}()?]
Но если вы не уверены, это не вредно, если вы включаете escape перед символом, не состоящим из слов, который вы пытаетесь найти.
Цифра или буква - это символ слова, экранирование цифры относится к предыдущему совпадению, экранирование буквы может соответствовать непечатаемому символу, например, новая строка (\ n), символ табуляции (\ t) или граница слова (\ b) или набор символов, как любой символ слова (\ w), любой несловесный символ (\ W).
Не избегайте буквы или цифры, если только вы не имеете это в виду.
Вы можете использовать функцию setattr для динамической установки атрибутов:
for key,value in request.GET.items():
setattr(foo, key, value)
Если request.GET
является словарем и класс Foo
не использует __ слоты __
, то это также должно работать:
# foo is a Foo instance
foo.__dict__.update(request.GET)
Вы почти поняли.
foo = Foo(**request.GET)
должно помочь.
Если вы используете это для создания объекта модели, который затем сохраняется, я настоятельно рекомендую использовать ModelForm . Это будет делать то, что вы описали, каноническим способом для Django, с добавлением проверки.
Чтобы расширить - я не имел в виду использовать его для вывода формы, просто ввод формы. Как показано ниже:
class Foo(models.Model):
a = models.CharField(max_length=255),
b = models.PositiveIntegerField()
class FooForm(forms.ModelForm):
class Meta:
model = Foo
def insert_foo(request):
form = FooForm(request.GET)
if not form.is_valid():
# Handle error conditions here
pass
else:
form.save()
return HttpResponse('Your response')
Затем, предполагая, что он привязан к / import /, GET для / import /? A = Test & b = 1 вставит новый Foo с a = "Test" и b = "1".