views.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. from django.db import connection
  2. from django.http import HttpResponseRedirect, JsonResponse
  3. from django.shortcuts import render
  4. from django.views.decorators.clickjacking import xframe_options_sameorigin
  5. from blog import models
  6. from blog.controller import article
  7. json_str = '''{
  8. "results": {
  9. "category1": {
  10. "name": "Category 1",
  11. "results": [
  12. {
  13. "title": "Result Title",
  14. "url": "/optional/url/on/click",
  15. "image": "optional-image.jpg",
  16. "price": "Optional Price",
  17. "description": "Optional Description"
  18. },
  19. {
  20. "title": "Result Title",
  21. "url": "/optional/url/on/click",
  22. "image": "optional-image.jpg",
  23. "price": "Optional Price",
  24. "description": "Optional Description"
  25. }
  26. ]
  27. },
  28. "category2": {
  29. "name": "Category 2",
  30. "results": [
  31. {
  32. "title": "Result Title",
  33. "url": "/optional/url/on/click",
  34. "image": "optional-image.jpg",
  35. "price": "Optional Price",
  36. "description": "Optional Description"
  37. }
  38. ]
  39. }
  40. },
  41. // optional action below results
  42. "action": {
  43. "url": '/path/to/results',
  44. "text": "View all 202 results"
  45. }
  46. }'''
  47. def search(request):
  48. if request.method == 'GET':
  49. keywords = request.GET.get('keywords')
  50. if keywords is not None:
  51. search_dict = dict()
  52. search_dict['title__contains'] = keywords
  53. search_dict['status'] = 1
  54. result = models.Article.objects.filter(**search_dict).values('id', 'intro', 'title', 'category__name')
  55. result_list = {}
  56. for item in result:
  57. if result_list.get(item['category__name']) == None:
  58. result_list[item['category__name']] = {}
  59. result_list[item['category__name']]['title'] = item['category__name']
  60. result_list[item['category__name']]['results'] = [
  61. {
  62. 'title': item['title'],
  63. 'description': item['intro'],
  64. 'url': '/article/{0}.html'.format(item['id'])
  65. }
  66. ]
  67. else:
  68. result_list[item['category__name']]['results'].append({
  69. 'title': item['title'],
  70. 'description': item['intro'],
  71. 'url': '/article/{0}.html'.format(item['id'])
  72. })
  73. return JsonResponse({'results':result_list}, safe=False)
  74. else:
  75. return JsonResponse({'results': []}, safe=False)
  76. else:
  77. return JsonResponse({"success": False, "message": "FUCK YOU"}, safe=False)
  78. def current_record(request, date):
  79. page = request.GET.get('page')
  80. if page is None:
  81. page = 0
  82. result = get_record_and_tags()
  83. context = {'current_category': date,
  84. 'articles': article.get_article(is_paginator=True, page=int(page), date_record=date),
  85. 'records': result['records'],
  86. 'tags': result['tags']
  87. }
  88. return render(request, 'category.html', context=context)
  89. def avatar(request, pk):
  90. sql = '''select avatar from auth_user au left join avatar_avatar aa on au.id = aa.user_id where au.id = {0}'''.format(
  91. pk)
  92. cursor = connection.cursor()
  93. cursor.execute(sql)
  94. fetchall = cursor.fetchall()
  95. return HttpResponseRedirect('/' + fetchall[0][0]) # 跳转到主界面
  96. # Create your views here.
  97. @xframe_options_sameorigin
  98. def index(request):
  99. article_sql = '''SELECT count(*) as count,strftime('%Y-%m',created_time) as datetime FROM blog_article group by strftime('%Y,%m',created_time)'''
  100. tag_sql = '''SELECT bt.id,bt.name,count() as count FROM blog_tags bt left join blog_article_tags bat on bt.id = bat.tags_id group by bt.name
  101. order by count desc limit 10'''
  102. cursor = connection.cursor()
  103. cursor.execute(article_sql)
  104. fetchall = cursor.fetchall()
  105. records = []
  106. for obj in fetchall:
  107. dic = {}
  108. dic['count'] = obj[0]
  109. dic['datetime'] = obj[1]
  110. records.append(dic)
  111. cursor.execute(tag_sql)
  112. fetchall = cursor.fetchall()
  113. tags = []
  114. for obj in fetchall:
  115. dic = {}
  116. dic['id'] = obj[0]
  117. dic['name'] = obj[1]
  118. dic['count'] = obj[2]
  119. tags.append(dic)
  120. context = {
  121. 'articles_new': article.get_article(20),
  122. 'records': records,
  123. 'tags': tags
  124. }
  125. return render(request, 'index.html', context=context)
  126. def get_record_and_tags():
  127. article_sql = '''SELECT count(*) as count,strftime('%Y-%m',created_time) as datetime FROM blog_article group by strftime('%Y,%m',created_time) order by created_time desc'''
  128. tag_sql = '''SELECT bt.id,bt.name,count() as count FROM blog_tags bt left join blog_article_tags bat on bt.id = bat.tags_id group by bt.name
  129. order by count desc limit 10'''
  130. cursor = connection.cursor()
  131. cursor.execute(article_sql)
  132. fetchall = cursor.fetchall()
  133. records = []
  134. for obj in fetchall:
  135. dic = {}
  136. dic['count'] = obj[0]
  137. dic['datetime'] = obj[1]
  138. records.append(dic)
  139. cursor.execute(tag_sql)
  140. fetchall = cursor.fetchall()
  141. tags = []
  142. for obj in fetchall:
  143. dic = {}
  144. dic['id'] = obj[0]
  145. dic['name'] = obj[1]
  146. dic['count'] = obj[2]
  147. tags.append(dic)
  148. context = {
  149. 'records': records,
  150. 'tags': tags
  151. }
  152. return context