Для хороших зашифрованных сообщений или контрольных сумм вероятность столкновения практически невозможна.
Хорошие алгоритмы шифрования и контрольной суммы создают зашифрованные сообщения, которые неотличимы от случайности. Все, что меньше, означает, что что-то из исходного сообщения выживает. Это означает, что любой данный токен доступа с равной вероятностью сопоставляется с любым возможным зашифрованным сообщением. Все, что меньше, позволит злоумышленнику угадать сообщение.
Криптографическая стойкость HMAC зависит от криптографической стойкости лежащей в основе хеш-функции, размера ее хеш-вывода, а также размера и качества ключа.
blockquote>Хотя это не совсем нарушено, безопасность SHA-1 была значительно подорвана . Вы должны использовать SHA-256 или лучше.
Я думаю, что использование контекстного процессора в этом случае является излишним. Вы можете легко сделать это:
#base.html
<html>
<head>
<title>{% block title %}My Cool Website{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
, а затем:
# blog.html
{% extends 'base.html' %}
{% block content %}
<h1>{% block title %}My Blog{% endblock %}</h1>
Lorem ipsum here...
{% endblock %}
и так далее ... Похоже на DRY-совместимое.
Вы, вероятно, на самом деле не хотите использовать блок, а скорее просто использовать переменную:
# base.html
<html>
<head>
<title>{{ title|default:"My Cool Website" }}</title>
</head>
<body>
<h1>{{ title|default:"My Cool Website" }}</h1>
</body>
</html>
Вы затем устанавливаете заголовок через контекст.
можно использовать {% include subtemplate.html %}
несколько раз. это не то же как блоки, но добивается цели.
Существует два легких решения для этого.
самое легкое должно поместить Ваш заголовок в переменную контекста. Вы установили бы переменную контекста в своем представлении.
, Если Вы используете что-то как универсальные представления и не имеете views.py для изображений, кошек, и т.д. затем, можно пойти путем пользовательский тег шаблона, который устанавливает переменную в контексте .
Хождение этим путем позволило бы Вам сделать что-то как:
{% extends "base.html" %}
{% load set_page_title %}
{% page_title "My Pictures" %}
...
Затем в Вашем base.html:
...
{% block title %}{{ page_title }}{% endblock %}
...
<h1>{{ page_title }}</h1>
Use the Django template macros plugin:
https://gist.github.com/1715202 (django >= 1.4)
or
http://www.djangosnippets.org/snippets/363/ (django < 1.4)
# base.html
{% kwacro title %}
{% block title %}My Cool Website{% endblock %}
{% endkwacro %}
<html>
<head>
<title>{% usekwacro title %}</title>
</head>
<body>
<h1>{% usekwacro title %}</h1>
</body>
</html>
and
# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}
# base.html
{% macro title %}
{% block title %}My Cool Website{% endblock %}
{% endmacro %}
<html>
<head>
<title>{% usemacro title %}</title>
</head>
<body>
<h1>{% usemacro title %}</h1>
</body>
</html>
and
# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}
Вот способ, который я обнаружил, пытаясь сделать то же самое сам:
# base_helper.html
<html>
<head>
<title>{% block _title1 %}{% endblock %}</title>
</head>
<body>
<h1>{% block _title2 %}{% endblock %}</h1>
</body>
</html>
# base.html
{% extends "base_helper.html" %}
# Copy title into _title1 & _title2, using "My Cool Website" as a default.
{% block _title1 %}{% block _title2 %}{% block title %}My Cool Website{% endblock %}{% endblock %}{% endblock %}
К сожалению, требуется дополнительный файл, но не требует передачи заголовка из представления.
Основываясь на предложении Ван Гейла, вы могли создавать теги get и set, добавив в файл templatetags.py следующее:
register = template.Library()
Stateful = {}
def do_set(parser, token):
_, key = token.split_contents()
nodelist = parser.parse(('endset',))
parser.delete_first_token() # from the example -- why?
return SetStatefulNode(key,nodelist)
class SetStatefulNode(template.Node):
def __init__(self, key, nodes):
Stateful[key] = nodes
def render(self, context):
return ''
register.tag('set', do_set)
def do_get(parser, token):
tag_name, key = token.split_contents()
return GetStatefulNode(key)
class GetStatefulNode(template.Node):
def __init__(self, key):
self.key = key
def render(self, context):
return ''.join( [x.render(context) for x in Stateful[self.key]] )
register.tag('get', do_get)
Затем установите значения в одном шаблоне с помощью {% set foo%} поместите данные сюда {% endset%}
и получите их через {% get foo%}
в другом.