home.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. # -*- coding: UTF-8 -*-
  2. from django.http import HttpResponse,HttpResponseRedirect
  3. from django.conf import settings
  4. from django.shortcuts import render_to_response,RequestContext
  5. #from django_hosts.resolvers import reverse
  6. from django.views.decorators.csrf import csrf_exempt
  7. #from django.core.cache import get_cache
  8. from django.conf import settings
  9. from django.core.urlresolvers import reverse
  10. from django.contrib import messages
  11. from django.db.models import Max as DbMax
  12. from siteutil.DataConvert import str2int,CheckPOST,str2long,BigIntUniqueID,TIIHASH
  13. from siteutil.CommonPaginator import SelfPaginator
  14. from siteutil.redisconf import RedisConfigHandler
  15. from zlogin.common.JsonResponse import JsonResponse
  16. from zlogin.decorators import login_detect,login_required,PermNeed
  17. from zlogin import zlauth
  18. from zlogin.zlauth import GetUser,PermCheck
  19. from zlogin.captcha_app import CheckCaptcha,OutsiteCaptchaURL
  20. from pichublog.models import KVConf,BlogCategoty,BlogPost,BlogComment,LeaveMsg
  21. from pichublog.forms import BlogCategotyForm,EditPostForm,PostPermForm
  22. #cache = get_cache("pichublog")
  23. import traceback
  24. def strFastConfGet(key,default=""):
  25. r = RedisConfigHandler(settings.CFG_REDIS,"pichublog")
  26. return r.get_or_set(key,default)
  27. def boolFastConfGet(key,default=False):
  28. r = RedisConfigHandler(settings.CFG_REDIS,"pichublog")
  29. return r.get_or_set_bool(key,default)
  30. @login_detect()
  31. def Home(request):
  32. mpid = strFastConfGet('HomePagePost',default=0)
  33. mpo = None
  34. try:
  35. mpo = BlogPost.objects.get(id=str2int(mpid))
  36. hp = True
  37. except:
  38. hp = False
  39. if hp:
  40. if not mpo.rendered:
  41. hp = False
  42. kwargs = {"request":request,"hp":hp,"mpo":mpo}
  43. return render_to_response('home/home.html',kwargs,RequestContext(request))
  44. def LeaveMsgPage(request):
  45. kwargs = {"request":request,'OutsiteCaptchaURL':OutsiteCaptchaURL(request),
  46. "LeaveMsgReviewSwitch":boolFastConfGet('LeaveMsgReviewSwitch',default=True)}
  47. return render_to_response('home/leave.msg.html',kwargs,RequestContext(request))
  48. def AjaxShowLeaveMsg(request):
  49. thisuser = GetUser(request)
  50. owner = PermCheck(request.auth,'pichublog','Admin')
  51. if owner:
  52. cmt = LeaveMsg.objects.all().order_by('-time')
  53. else:
  54. cmt = LeaveMsg.objects.filter(reviewed=True).order_by('-time')
  55. lPage = SelfPaginator(request,cmt,20)
  56. kwvars = {
  57. 'request':request,
  58. 'owner':owner,
  59. 'lPage':lPage,
  60. 'AjaxPaginatorID':'cmt',
  61. }
  62. return render_to_response('home/ajax.leavemsg.html',kwvars,RequestContext(request))
  63. @PermNeed('pichublog','Admin')
  64. def LeaveMsgDel(request,cmid):
  65. try:
  66. lmo = LeaveMsg.objects.get(cmid=cmid)
  67. except LeaveMsg.DoesNotExist:
  68. return JsonResponse({"stat":"err","type":"DoesNotExist"})
  69. if request.GET.get('veryfycode') == TIIHASH(lmo.title,lmo.fromuser):
  70. lmo.delete()
  71. else:
  72. return JsonResponse({"stat":"err","type":"VerificationError"})
  73. return JsonResponse({"stat":"ok","type":"OK"})
  74. @PermNeed('pichublog','Admin')
  75. def LeaveMsgSetReview(request,cmid):
  76. try:
  77. lmo = LeaveMsg.objects.get(cmid=cmid)
  78. except LeaveMsg.DoesNotExist:
  79. return JsonResponse({"stat":"err","type":"DoesNotExist"})
  80. logic = request.GET.get('val')
  81. bl = (logic == "true")
  82. lmo.reviewed = bl
  83. lmo.save()
  84. return JsonResponse({"stat":"ok","type":"OK"})
  85. def LeaveMsgAdd(request):
  86. if request.method == "POST":
  87. if request.auth.islogin:
  88. chkpr=CheckPOST(['content'],request.POST.keys())
  89. if not chkpr == "" :
  90. return JsonResponse({"code":400,"msg":"Error Args."})
  91. else:
  92. chkpr=CheckPOST(['content','nick','website','mail','title'],request.POST.keys())
  93. if not chkpr == "" :
  94. return JsonResponse({"code":400,"msg":"Error Args."})
  95. if request.auth.islogin:
  96. content = request.POST.get('content')
  97. title = request.POST.get('title')
  98. stk = request.auth.cookie.get('zl2_token')
  99. LeaveMsg.objects.create(cmid=BigIntUniqueID(),title=title,anonymou=False,stoken=stk,fromuser=request.auth.user,content=content,reviewed=True)
  100. return HttpResponseRedirect(reverse('pichublog_msgboard'))
  101. else:
  102. capt = request.POST.get('captcha')
  103. if not CheckCaptcha(request,capt):
  104. messages.error(request,u"<b>验证码错误</b>")
  105. return HttpResponseRedirect(reverse('pichublog_msgboard'))
  106. content = request.POST.get('content')
  107. nick = request.POST.get('nick')
  108. mail = request.POST.get('mail')
  109. web = request.POST.get('website')
  110. title = request.POST.get('title')
  111. stk = request.auth.cookie.get('zl2_token')
  112. rws = not boolFastConfGet('LeaveMsgReviewSwitch',default=True)
  113. LeaveMsg.objects.create(cmid=BigIntUniqueID(),title=title,anonymou=True,stoken=stk,fromuser=nick,mail=mail,website=web,content=content,reviewed=rws)
  114. return HttpResponseRedirect(reverse('pichublog_msgboard'))
  115. else:
  116. return HttpResponse("405 Method Not Allowed")
  117. @PermNeed('pichublog','Admin')
  118. def SysConf(request):
  119. kwvars = {
  120. "request":request,
  121. }
  122. return render_to_response('home/sysconf.home.html',kwvars,RequestContext(request))
  123. @PermNeed('pichublog','Admin')
  124. def SysVarConf(request):
  125. kwvars = {
  126. "request":request,
  127. }
  128. return render_to_response('home/sysconf.var.html',kwvars,RequestContext(request))
  129. @csrf_exempt
  130. @PermNeed('pichublog','Admin')
  131. def SysVarConfAjaxGet(request):
  132. defaultconf = [
  133. ("LeaveMsgReviewSwitch","访客在留言板的留言要求审核再显示",True,"bool"),
  134. ("CommentsReviewSwitch","访客对文章的评论要求审核再显示",True,"bool"),
  135. ("HomePagePost","首页内容来源文章ID","","str"),
  136. ("MainTopList","总分类置顶列表(填文章ID,多项之间英文逗号隔开)","","str"),
  137. ]
  138. conf = []
  139. for i in defaultconf:
  140. if i[3] == "bool":
  141. conf.append((i[0],i[1],boolFastConfGet(i[0],default=i[2]),i[3]))
  142. else:
  143. conf.append((i[0],i[1],strFastConfGet(i[0],default=i[2]),i[3]))
  144. kwvars = {
  145. "request":request,
  146. "conf":conf
  147. }
  148. return render_to_response('home/sysconf.var.ajax.list.html',kwvars,RequestContext(request))
  149. @csrf_exempt
  150. @PermNeed('pichublog','Admin')
  151. def SysVarConfAjaxEdit(request):
  152. if request.method == "POST":
  153. chkpr=CheckPOST(['key','value'],request.POST.keys())
  154. if not chkpr == "" :
  155. return JsonResponse({"code":"400","errmsg":"Invalid Args."})
  156. r = RedisConfigHandler(settings.CFG_REDIS,"pichublog")
  157. r.set(request.POST['key'],request.POST['value'])
  158. return JsonResponse({"code":"200"})
  159. else:
  160. return JsonResponse({"code":"400","errmsg":"Invalid Args."})
  161. @csrf_exempt
  162. @PermNeed('pichublog','Admin')
  163. def SysVarConfAjaxToggle(request):
  164. if request.method == "POST":
  165. chkpr=CheckPOST(['key'],request.POST.keys())
  166. if not chkpr == "" :
  167. return JsonResponse({"code":"400","errmsg":"Invalid Args."})
  168. r = RedisConfigHandler(settings.CFG_REDIS,"pichublog")
  169. c = r.get(request.POST['key'])
  170. if c == "True":
  171. r.set_bool(request.POST['key'],False)
  172. elif c == "False":
  173. r.set_bool(request.POST['key'],True)
  174. else:
  175. return JsonResponse({"code":"505","errmsg":"Not Boolean Field"})
  176. return JsonResponse({"code":"200"})
  177. else:
  178. return JsonResponse({"code":"400","errmsg":"Invalid Args."})
  179. @PermNeed('pichublog','Admin')
  180. def CategoryList(request):
  181. kwvars = {
  182. "request":request,
  183. }
  184. return render_to_response('home/sysconf.category.list.html',kwvars,RequestContext(request))
  185. @PermNeed('pichublog','Admin')
  186. def AjaxCategoryList(request):
  187. cto = BlogCategoty.objects.all().order_by('order')
  188. kwvars = {
  189. "request":request,
  190. "cto":cto,
  191. }
  192. return render_to_response('home/sysconf.catlist.ajax.html',kwvars,RequestContext(request))
  193. @PermNeed('pichublog','Admin')
  194. def CategoryAdd(request):
  195. if request.method == "POST":
  196. form = BlogCategotyForm(request.POST)
  197. if form.is_valid():
  198. co = form.save(commit=False)
  199. maxorder = BlogCategoty.objects.all().aggregate(order_max=DbMax('order'))['order_max']
  200. if maxorder == None:
  201. maxorder = 0
  202. co.order = maxorder+1
  203. co.save()
  204. form.save_m2m()
  205. return HttpResponseRedirect(reverse('pichublog_catlist'))
  206. else:
  207. form = BlogCategotyForm()
  208. kwvars = {
  209. "request":request,
  210. 'form':form,
  211. "addmode":True,
  212. }
  213. return render_to_response('home/sysconf.category.edit.html',kwvars,RequestContext(request))
  214. @PermNeed('pichublog','Admin')
  215. def CategoryEdit(request,ID):
  216. try:
  217. bco = BlogCategoty.objects.get(id=ID)
  218. except BlogCategoty.DoesNotExist:
  219. messages.error(request,u"<b>编辑分类失败</b><br /><b>详细信息:</b>找不到ID为%s的分类!"%ID)
  220. return HttpResponseRedirect(reverse('pichublog_catlist'))
  221. if request.method == "POST":
  222. form = BlogCategotyForm(request.POST,instance=bco)
  223. if form.is_valid():
  224. co = form.save(commit=False)
  225. co.order = BlogCategoty.objects.all().aggregate(order_max=DbMax('order'))['order_max']
  226. co.save()
  227. form.save_m2m()
  228. return HttpResponseRedirect(reverse('pichublog_catlist'))
  229. else:
  230. form = BlogCategotyForm(instance=bco)
  231. kwvars = {
  232. "request":request,
  233. 'form':form,
  234. "addmode":False,
  235. }
  236. return render_to_response('home/sysconf.category.edit.html',kwvars,RequestContext(request))
  237. @PermNeed('pichublog','Admin')
  238. def CategoryDel(request,ID):
  239. try:
  240. bco = BlogCategoty.objects.get(id=ID).delete()
  241. except BlogCategoty.DoesNotExist:
  242. messages.error(request,u"<b>删除分类失败</b><br /><b>详细信息:</b>找不到ID为%s的分类!"%ID)
  243. return HttpResponseRedirect(reverse('pichublog_catlist'))
  244. @PermNeed('pichublog','Admin')
  245. def AjaxCategoryMoveOrder(request):
  246. chkpr = CheckPOST(['dct','mvid'],request.GET.keys())
  247. if not chkpr == "" :
  248. return JsonResponse({"code":400,"msg":"Error Args."})
  249. dct = request.GET.get('dct')
  250. mvid = request.GET.get('mvid')
  251. try:
  252. curo = BlogCategoty.objects.get(id=mvid)
  253. except BlogCategoty.DoesNotExist:
  254. return JsonResponse({"code":404,"msg":"object Not Found."})
  255. if dct == "up":
  256. neo = curo.order - 1
  257. elif dct == "dn":
  258. neo = curo.order + 1
  259. try:
  260. nexto = BlogCategoty.objects.get(order=neo)
  261. except BlogCategoty.DoesNotExist:
  262. return JsonResponse({"code":300,"msg":"Attached Limit."})
  263. except BlogCategoty.MultipleObjectsReturned:
  264. return JsonResponse({"code":500,"isec":"500@AjaxChpOcMv$100","msg":"Internal Server Error, Please Contact With Website Master or Admin."})
  265. o1=nexto.order
  266. o2=curo.order
  267. nexto.order=o2
  268. curo.order=o1
  269. nexto.save()
  270. curo.save()
  271. return JsonResponse({"code":200,"msg":"OK."})
  272. @PermNeed('pichublog','Admin')
  273. def AjaxGetUserID(request,uname):
  274. uobj = zlauth.GetUserByName(uname)
  275. if uobj == None:
  276. return JsonResponse({"code":404,"nick":u"(用户不存在)","uid":"0"})
  277. else:
  278. return JsonResponse({"code":200,"nick":u"%s<%s>"%(uobj.nick,uobj.name),"uid":unicode(uobj.id)})