1. Python / Говнокод #19103

    −22

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 27 Ноября 2015

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

    • 313373 only

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

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

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