Змея / Говнокод #19103 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
from django.middleware.csrf import get_token
from django.utils.translation import ugettext as _
from django.conf import settings
from models import Poll, Option, Token
import urllib
import json
import re
uuid4hex = re.compile('[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}\Z', re.I)


def assemble_poll_body (poll, token):
	if not poll.is_open:
		if poll.show_results:
			return assemble_poll_options(poll, 'results')
		else:
			return '<p>' + _(u'Poll closed') + '</p>'

	if poll.token_required and not token:
		if poll.show_results:
			return assemble_poll_options(poll, 'results')
		else:
			return assemble_poll_options(poll, 'disabled')

	return assemble_poll_options(poll, 'enabled')


def assemble_poll_options (poll, mode):
	result  = '<ul class="radioset">'
	for option in Option.objects.filter(poll=poll):
		result += '<li>'
		if mode == 'results':
			result += option.value
			result += '<div class="votebar" data-votes-counter="' + str(option.votes_counter) + '"><span>' + str(option.votes_counter) + '</span></div>'
		else:
			result += '<input type="radio" name="option" value="' + str(option.id) + '"><label>' + option.value + '</label>'
			if poll.show_results:
				result += '<div class="votebar" data-votes-counter="' + str(option.votes_counter) + '"><span>' + str(option.votes_counter) + '</span></div>'
		result += '</li>'
	result += '</ul>'
	if mode == 'enabled':
		result += '<input type="submit" value="' + _(u'Vote') + '">'
	if mode == 'disabled':
		result += '<input type="submit" value="' + _(u'313373 only') + '" disabled="disabled">'
	return result


def get_poll_by_uuid (poll_uuid):
	if not uuid4hex.match(poll_uuid):
		return Poll(title='this is not uuid')
	if not Poll.objects.filter(uuid=poll_uuid):
		return Poll(title='wrong poll uuid')
	return Poll.objects.get(uuid=poll_uuid)


def get_poll_form_html (request, poll_uuid, back_url):
	csrf_token = get_token(request)
	poll = get_poll_by_uuid(poll_uuid)
	result = (
		'<form class="smallform poll" action="/polls/" method="POST"><input type="hidden" name="csrfmiddlewaretoken" value="' + csrf_token + '">'
		+ '<input type="hidden" name="uuid" value="' + poll_uuid + '">'
		+ '<input type="hidden" name="back_url" value="' + back_url + '">'
		+ '<p><strong>' + poll.title + '</strong></p>'
		+ '<p>' + poll.text + '</p>'
		+ assemble_poll_body(poll, request.COOKIES.get('token'))
		+ '</form>'
	)
	return result


def get_poll_results_html (poll_uuid):
	poll = get_poll_by_uuid(poll_uuid)
	result = (
		'<form class="smallform poll">'
		+ '<p><strong>' + poll.title + '</strong></p>'
		+ '<p>' + poll.text + '</p>'
		+ assemble_poll_options(poll, 'results')
		+ '</form>'
	)
	return result


def token_url_for_email (back_url):
	token = Token.objects.create(purpose="email")
	result = 'https://' + settings.SITE_DOMAIN + '/polls/activate_token?token=' + str(token.uuid) + '&redirect_url=' + urllib.quote(back_url)
	return result

Запостил: indus1 indus1, (Updated )

Комментарии (16) RSS

  • 313373 only

    Программу на ПХП можно даже на питоне написать
    Ответить
  • >return '<p>' + _(u'Poll closed') + '</p>'
    return '<p>' + _(u"Pool's closed") + '</p>'
    Ответить
    • В django есть шаблоны, формы и прочие средства. Форматирования строк по крайней мере 'foo {} foo'.format(var), а не 'foo'+str(var)+'foo'
      Ответить
      • Почему 'foo {} foo'.format(var) лучше, чем 'foo'+str(var)+'foo'? Во втором варианте сразу видно, что куда вставляется, а в первом варианте нужно отсчитать N-ные по порядку скобочки в шаблоне, а потом перевести глаза на тьюпл и отсчитать там N-ый по порядку элемент.
        Ответить
  • Часто делаю наоборот, и здорово помогает BeautifulSoup, обратите внимание на soup.wrap(), меньше рукоблудить.
    Ответить
  • К слову, этот говнокод я написал как-то вечером наспех.
    С тех пор я его давно уже переписал как надо, по всем правилам лучших практик и джанги.

    Спасибо за внимание.
    С уважением, автор этого говнокода.
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8