views.py 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. from django.contrib.auth.hashers import make_password, check_password
  2. from .forms import RegForm, CheckInForm, ForgetPSWForm
  3. from .models import Organizer, CheckIn, Item, UserContent
  4. from .functions import *
  5. from Niko.settings import PRODUCTION_ENVIRONMENT
  6. from .setting import USER_UPLOAD_URL_PREFIX, QR_CODE_URL_PREFIX
  7. # Create your views here.
  8. def checkIn(request, url):
  9. # 用户注册界面
  10. if url == 'register':
  11. if request.method == 'POST':
  12. regForm = RegForm(request.POST)
  13. if regForm.is_valid():
  14. organizer = Organizer
  15. organizer.username = regForm.cleaned_data['username'].lower().strip()
  16. organizer.nickname = regForm.cleaned_data['nickname'].lower().strip()
  17. organizer.email = regForm.cleaned_data['email'].lower().strip()
  18. organizer.mobile = regForm.cleaned_data['mobile']
  19. organizer.password = make_password(regForm.cleaned_data['psw1'])
  20. organizer.photo = ''
  21. # 获取注册的IP地址
  22. try:
  23. organizer.registerIP = request.META['HTTP_X_FORWARDED_FOR']
  24. except:
  25. organizer.registerIP = request.META['REMOTE_ADDR']
  26. organizer.createNew(organizer)
  27. organizer = Organizer.searchByUsername(organizer)
  28. request.session['loginUser'] = organizer.username
  29. request.session['loginID'] = organizer.ID
  30. request.session['loginNickname'] = organizer.nickname
  31. return render(request, 'checkIn/directPage.html', {'alertMsg': '用户创建成功。', 'dirLink': '/checkIn/main'})
  32. else:
  33. return render(request, 'checkIn/register.html', {'registerForm': regForm})
  34. else:
  35. return render(request, 'checkIn/register.html', {'registerForm': RegForm})
  36. if url == 'login':
  37. # 用户登录页面
  38. if request.method == 'POST':
  39. organizer = Organizer
  40. organizer.username = request.POST['username'].strip().lower()
  41. organizer = Organizer.searchByUsername(organizer)
  42. if organizer == None:
  43. return render(request, 'checkIn/directPage.html',
  44. {'alertMsg': '用户名不存在。', 'dirLink': '/checkIn/login/'})
  45. if check_password(request.POST['password'], organizer.password):
  46. request.session['loginUser'] = organizer.username
  47. request.session['loginID'] = organizer.ID
  48. request.session['loginNickname'] = organizer.nickname
  49. return render(request, 'checkIn/directPage.html', {'alertMsg': '登录成功。', 'dirLink': '/checkIn/main/'})
  50. else:
  51. return render(request, 'checkIn/directPage.html',
  52. {'alertMsg': '用户名或者密码错误。', 'dirLink': '/checkIn/login/'})
  53. else:
  54. if getSession(request, 'loginID'): # 如果检测到用户已经登陆就直接跳转
  55. return HttpResponseRedirect('/checkIn/main')
  56. else:
  57. return render(request, 'checkIn/login.html')
  58. # 忘记密码
  59. if url == 'forgetPSW':
  60. if checkSession(request, 'loginUser') and checkSession(request, 'ID'):
  61. return render(request, 'checkIn/directPage.html', {'alertMsg': '你已经登录了。', 'dirLink': '/'})
  62. if request.method == 'POST':
  63. organizer = Organizer
  64. form = ForgetPSWForm(request.POST)
  65. if form.is_valid():
  66. organizer.username = form.cleaned_data['username']
  67. organizer = Organizer.searchByUsername(organizer)
  68. if organizer.mobile == form.cleaned_data['mobile']:
  69. organizer.password = make_password('qaz123')
  70. Organizer.updateByID(organizer)
  71. return render(request, 'checkIn/directPage.html',
  72. {'alertMsg': '你的密码已经更改为 qaz123。', 'dirLink': '/checkIn/login'})
  73. else:
  74. return render(request, 'checkIn/forgetPSW.html', {'forgetPSWForm': form, 'alert': '你的手机号码与注册的不符。'})
  75. else:
  76. del organizer
  77. return render(request, 'checkIn/forgetPSW.html', {'forgetPSWForm': form})
  78. # 正常渲染页面
  79. else:
  80. form = ForgetPSWForm()
  81. return render(request, 'checkIn/forgetPSW.html', {'forgetPSWForm': form})
  82. if url == 'main':
  83. # 用户登陆后的页面
  84. if not checkLoginUser(request):
  85. return render(request, 'checkIn/directPage.html', {'alertMsg': '登录错误。', 'dirLink': '/checkIn/logout'})
  86. checkIn = CheckIn
  87. checkIn.o_ID = getSession(request, 'loginID')
  88. existingList = CheckIn.getExistingList(checkIn) # 获取名下的checkIn集合
  89. nickname = request.session['loginNickname']
  90. return render(request, 'checkIn/main.html', {'existingList': existingList, 'nickname': nickname})
  91. if url == 'newCheckIn':
  92. # 用户创建新的CheckIn项目
  93. if not checkLoginUser(request):
  94. return render(request, 'checkIn/directPage.html', {'alertMsg': '请重新登录。', 'dirLink': '/'})
  95. checkIn = CheckIn
  96. if request.method == 'POST':
  97. form = CheckInForm(request.POST)
  98. if form.is_valid():
  99. if request.GET.get('ID'): # 如果是更新话,先读取原始数据
  100. checkIn.ID = request.GET['ID']
  101. checkIn = CheckIn.searchByID(checkIn)
  102. if checkIn == None:
  103. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  104. checkIn.startTime = form.cleaned_data['startTime']
  105. checkIn.endTime = form.cleaned_data['endTime']
  106. checkIn.o_ID = request.session['loginID']
  107. checkIn.description = form.cleaned_data['description']
  108. checkIn.maxNum = form.cleaned_data['maxNum']
  109. # checkIn.creatorConfirm = form.cleaned_data['creatorConfirm']
  110. # checkIn.captcha = form.cleaned_data['captcha']
  111. if request.GET.get('ID'):
  112. # 如果是更新话,就能获取check In ID,然后调用这一段。
  113. CheckIn.updateByID(checkIn)
  114. return HttpResponseRedirect('/checkIn/checkInDetail/?ID=%s' % (checkIn.ID))
  115. else:
  116. # 如果是新建的话,GET里面没有ID
  117. c_ID = CheckIn.createNew(checkIn)
  118. if c_ID == 0: # 检测到重名
  119. alert = '你创建的活动重名了。'
  120. return render(request, 'checkIn/newCheckIn.html', {'form': form, 'alert': alert})
  121. else:
  122. return HttpResponseRedirect('/checkIn/newItems/?ID=%s' % (c_ID))
  123. # 普通打开页面,不是POST
  124. if request.GET.get('ID'):
  125. # 如果GET来ID数据的话,就填充表格,修改原有数据
  126. checkIn.ID = request.GET['ID']
  127. checkIn = CheckIn.searchByID(checkIn)
  128. if checkIn == None:
  129. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  130. if (not checkCorrectO_ID(request, checkIn.o_ID)) or checkIn == None:
  131. return render(request, 'checkIn/directPage.html',
  132. {'alertMsg': 'c_ID有错误,请重新登录。', 'dirLink': '/checkIn/logout'})
  133. if not checkIn:
  134. return render(request, 'checkIn/directPage.html', {'alertMsg': '这个ID不存在。', 'dirLink': '/'})
  135. else:
  136. form = CheckInForm
  137. data = {'startTime': str(checkIn.startTime), 'description': checkIn.description.strip(),
  138. 'o_ID': checkIn.o_ID}
  139. if checkIn.endTime:
  140. data['endTime'] = str(checkIn.endTime)
  141. data['maxNum'] = checkIn.maxNum
  142. data['creatorConfirm'] = checkIn.creatorConfirm
  143. data['captcha'] = checkIn.captcha
  144. form = CheckInForm(data)
  145. return render(request, 'checkIn/newCheckIn.html', {'form': form})
  146. else: # 创建新的checkIn
  147. # data = {'o_ID': request.session.get('loginID')}
  148. form = CheckInForm()
  149. # confirmList = [('0', '无需验证'), ('1', '点击确认')]
  150. # form.declared_fields['creatorConfirm'].choices = confirmList
  151. return render(request, 'checkIn/newCheckIn.html', {'form': form})
  152. if url == 'newItems':
  153. # 用户在新的checkIn项目下添加活动内容
  154. if not checkLoginUser(request):
  155. return render(request, 'checkIn/directPage.html', {'alertMsg': '请重新登录。', 'dirLink': '/'})
  156. item = Item
  157. if not checkGET(request, 'ID'):
  158. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  159. item.c_ID = request.GET['ID']
  160. checkIn = CheckIn
  161. checkIn.ID = item.c_ID
  162. checkIn = CheckIn.searchByID(checkIn)
  163. if checkIn is None:
  164. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  165. if (not checkCorrectO_ID(request, checkIn.o_ID)) or checkIn is None:
  166. return render(request, 'checkIn/directPage.html',
  167. {'alertMsg': 'c_ID有错误,请重新登录。', 'dirLink': '/checkIn/logout'})
  168. if request.method == 'POST':
  169. # 新建条目
  170. item.o_ID = getSession(request, 'loginID')
  171. checkIn = CheckIn()
  172. checkIn.ID = item.c_ID
  173. checkIn = CheckIn.searchByID(checkIn)
  174. item.c_description = checkIn.description.strip()
  175. item.description = request.POST['description'].strip()
  176. # 检验重名的Item
  177. if Item.sameItem(item):
  178. return render(request, 'checkIn/directPage.html',
  179. {'alertMsg': '重名了', 'dirLink': '/checkIn/newItems'})
  180. item.type = request.POST['type']
  181. if checkPOST(request, 'uniqueItem'):
  182. item.unique = True
  183. else:
  184. item.unique = False
  185. if checkPOST(request, 'reservedFlag'):
  186. item.reservedFlag = True
  187. item.reservedContent = request.POST['reservedContent'].strip()
  188. else:
  189. item.reservedFlag = False
  190. item.reservedContent = ''
  191. if item.type in ['4', '5', '6']: # 如果是单选选项需要在选项数据库里面输入
  192. item.itemSelection = request.POST['itemSelection'].strip()
  193. # 验证完成,创建item
  194. Item.createNew(item)
  195. existItemList = Item.searchByC_ID(item)
  196. return render(request, 'checkIn/newItems.html', {'existItemList': existItemList})
  197. else:
  198. existItemList = Item.searchByC_ID(item)
  199. return render(request, 'checkIn/newItems.html',
  200. {'existItemList': existItemList, 'checkInDesc': checkIn.description})
  201. if url == 'logout':
  202. request.session.clear()
  203. return render(request, 'checkIn/directPage.html', {'alertMsg': '成功退出。', 'dirLink': '/'})
  204. if url == 'checkInDetail':
  205. checkIn = CheckIn
  206. if not checkGET(request, 'ID'):
  207. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  208. checkIn.ID = request.GET['ID']
  209. checkIn = CheckIn.searchByID(checkIn)
  210. if checkIn is None:
  211. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  212. if (not checkCorrectO_ID(request, checkIn.o_ID)) or checkIn is None:
  213. return render(request, 'checkIn/directPage.html',
  214. {'alertMsg': 'c_ID有错误,请重新登录。', 'dirLink': '/checkIn/logout'})
  215. request.session['checkInDesc'] = checkIn.description
  216. request.session['checkInID'] = checkIn.ID
  217. return render(request, 'checkIn/checkInDetail.html', {'checkIn': checkIn})
  218. # 更新item
  219. if url == 'itemUpdate':
  220. item = Item
  221. # 提交表单后更新数据
  222. if request.method == 'POST':
  223. # 读取item数据
  224. if not checkGET(request, 'ID'):
  225. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  226. item.ID = request.GET['ID']
  227. item = Item.searchByID(item)
  228. item.description = request.POST['description'].strip()
  229. item.type = request.POST['type']
  230. item.itemSelection = request.POST['itemSelection']
  231. if checkPOST(request, 'uniqueItem'):
  232. item.unique = True
  233. else:
  234. item.unique = False
  235. if checkPOST(request, 'reservedFlag'):
  236. item.reservedFlag = True
  237. item.reservedContent = request.POST['reservedContent'].strip()
  238. else:
  239. item.reservedFlag = False
  240. item.reservedContent = ''
  241. # 更新数据
  242. Item.updateItemByID(item)
  243. return HttpResponseRedirect('/checkIn/newItems/?ID=%s' % (item.c_ID))
  244. # 非POST
  245. if request.method == 'GET':
  246. try:
  247. if not checkGET(request, 'ID'):
  248. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  249. item.ID = request.GET['ID']
  250. item = Item.searchByID(item)
  251. if (not checkCorrectO_ID(request, item.o_ID)) or item == '':
  252. return render(request, 'checkIn/directPage.html',
  253. {'alertMsg': 'c_ID有错误,请重新登录。', 'dirLink': '/checkIn/logout'})
  254. return render(request, 'checkIn/itemUpdate.html', {'item': item})
  255. except Exception as e:
  256. print(e)
  257. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  258. # 更新用户资料
  259. if url == 'updateInfo':
  260. organizer = Organizer
  261. if not checkSession(request, 'loginID'):
  262. return render(request, 'checkIn/directPage.html', {'alertMsg': '你还没有登录。', 'dirLink': '/'})
  263. organizer.ID = getSession(request, 'loginID')
  264. organizer = Organizer.searchByID(organizer)
  265. if request.method == 'POST':
  266. form = RegForm(request.POST)
  267. form.fields['psw1'].required = False
  268. form.fields['psw2'].required = False
  269. form.fields['username'].widget.attrs['readonly'] = 'readonly'
  270. if form.is_valid():
  271. if form.cleaned_data['psw1'] is not None:
  272. organizer.password = make_password(form.cleaned_data['psw1'])
  273. organizer.nickname = form.cleaned_data['nickname']
  274. organizer.mobile = form.cleaned_data['mobile']
  275. organizer.email = form.cleaned_data['email']
  276. Organizer.updateByID(organizer)
  277. return HttpResponseRedirect('/checkIn/main')
  278. else:
  279. return render(request, 'checkIn/updateInfo.html', {'form': form})
  280. else:
  281. form = RegForm(initial={'username': organizer.username, 'nickname': organizer.nickname,
  282. 'email': organizer.email, 'mobile': organizer.mobile,
  283. 'updateFlag': 'update', 'originalMobile': organizer.mobile})
  284. form.fields['psw1'].required = False
  285. form.fields['psw2'].required = False
  286. form.fields['username'].widget.attrs['readonly'] = 'readonly'
  287. return render(request, 'checkIn/updateInfo.html', {'form': form})
  288. # 生成二维码,并准备发布
  289. if url == 'public':
  290. checkIn = CheckIn
  291. if not checkGET(request, 'ID'):
  292. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  293. checkIn.ID = request.GET['ID']
  294. checkIn = CheckIn.searchByID(checkIn)
  295. if checkIn == None:
  296. return render(request, 'checkIn/directPage.html', {'alertMsg': '这个ID不存在。', 'dirLink': '/'})
  297. else:
  298. scheme = request.scheme
  299. host = request.get_host()
  300. import qrcode
  301. qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=10, border=1)
  302. url = '%s://%s/checkIn/user/checkIn/?ID=%s' % (scheme, host, checkIn.ID)
  303. qr.add_data(url)
  304. qr.make(fit=True)
  305. img = qr.make_image()
  306. import os
  307. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  308. imgLoc = '%s\\checkIn\\static\\media\\qrcode\\c_ID_%s.png' % (BASE_DIR, checkIn.ID)
  309. img.save(imgLoc)
  310. if PRODUCTION_ENVIRONMENT:
  311. from .setting import QR_CODE_URL_PREFIX
  312. qrcode_prefix = QR_CODE_URL_PREFIX
  313. else:
  314. qrcode_prefix = '/static/media/qrcode/'
  315. img_url = qrcode_prefix + 'c_ID_{}.png'.format(checkIn.ID) # 需要在服务器上添加checkIn_media为静态目录
  316. status = {}
  317. status['code'] = checkIn.status
  318. if status['code'] == 'draft':
  319. status['desc'] = '准备中'
  320. elif status['code'] == 'active':
  321. status['desc'] = '进行中'
  322. elif status['code'] == 'pause':
  323. status['desc'] = '暂停'
  324. return render(request, 'checkIn/public.html',
  325. {'url': url, 'image': img_url, 'c_ID': checkIn.ID, 'status': status,
  326. 'description': checkIn.description})
  327. # 组织者查看活动记录
  328. if url == 'checkInStatus':
  329. checkIn = CheckIn
  330. checkInResult = UserContent
  331. if not checkGET(request, 'ID'):
  332. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  333. checkIn.ID = request.GET['ID']
  334. checkIn = CheckIn.searchByID(checkIn)
  335. if checkIn == None:
  336. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  337. # 验证checkIn 用户和登录用户是否一致。
  338. if (not checkCorrectO_ID(request, checkIn.o_ID)) or checkIn == None:
  339. return render(request, 'checkIn/directPage.html',
  340. {'alertMsg': 'c_ID有错误,请重新登录。', 'dirLink': '/checkIn/logout'})
  341. checkInResult.c_ID = checkIn.ID
  342. result = UserContent.getContentList(checkInResult)
  343. # result = mongoSearchByID(checkIn.ID)
  344. result2 = None
  345. keys = None
  346. types_in_CheckIn = Item.get_types_by_cID_asc(checkIn.ID)
  347. types = []
  348. for t in types_in_CheckIn:
  349. types.append(t['type'])
  350. if len(result) != 0:
  351. keys = list(eval(result[0]['content']).keys())
  352. keys_iterator = iter(keys)
  353. result2 = []
  354. for x in result:
  355. single_line_result = list(eval(x['content']).values())
  356. i = 0
  357. single_line_result2 = []
  358. while i < len(single_line_result):
  359. single_cell_result = {'value': single_line_result[i], 'type': types[i]}
  360. single_line_result2.append(single_cell_result)
  361. i += 1
  362. result2.append(single_line_result2)
  363. file_type_list = [6, 7]
  364. non_file_type_list = [0, 1, 2, 3, 4, 5]
  365. url_prefix = USER_UPLOAD_URL_PREFIX
  366. if not PRODUCTION_ENVIRONMENT:
  367. url_prefix = '/static/media/user_upload/'
  368. return render(request, 'checkIn/checkInStatus.html',
  369. {'result': result2, 'keys': keys, 'c_ID': checkIn.ID, 'isFile': file_type_list,
  370. 'isNotFile': non_file_type_list, 'url_prefix': url_prefix})
  371. # 下载CSV
  372. if url == 'getCSV':
  373. checkIn = CheckIn
  374. checkInResult = UserContent
  375. if not checkGET(request, 'c_ID'):
  376. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  377. checkIn.ID = request.GET['c_ID']
  378. checkIn = CheckIn.searchByID(checkIn)
  379. if checkIn is None:
  380. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  381. # 验证checkIn 用户和登录用户是否一致。
  382. if (not checkCorrectO_ID(request, checkIn.o_ID)) or checkIn is None:
  383. return render(request, 'checkIn/directPage.html',
  384. {'alertMsg': 'c_ID有错误,请重新登录。', 'dirLink': '/checkIn/logout'})
  385. # 获取数据,生成response
  386. response = HttpResponse(content_type='text/csv;charset=ANSI')
  387. response['Content-Disposition'] = 'attachment; filename="checkIn_%s.csv"' % (checkIn.ID)
  388. import csv
  389. writer = csv.writer(response)
  390. checkInResult.c_ID = checkIn.ID
  391. result = UserContent.getContentList(checkInResult)
  392. types_in_CheckIn = Item.get_types_by_cID_asc(checkIn.ID)
  393. types = []
  394. for t in types_in_CheckIn:
  395. types.append(t['type'])
  396. file_type_list = [6, 7]
  397. non_file_type_list = [0, 1, 2, 3, 4, 5]
  398. url_prefix = USER_UPLOAD_URL_PREFIX
  399. if not PRODUCTION_ENVIRONMENT:
  400. url_prefix = '/static/media/user_upload/'
  401. # result = mongoSearchByID(checkIn.ID)
  402. keys = eval(result[0]['content']).keys()
  403. writer.writerow(keys)
  404. # result2 = []
  405. for x in result:
  406. record = eval(x['content']).values()
  407. record_list = list(record)
  408. i = 0
  409. while i < len(types):
  410. if types[i] in file_type_list:
  411. record_list[i] = 'http://' + request.get_host() + url_prefix + record_list[i]
  412. else:
  413. # 添加一个tab,用来避免excel打开身份证号码最后几位显示为0的问题
  414. record_list[i] = '\t' + record_list[i]
  415. i += 1
  416. writer.writerow(record_list)
  417. return response
  418. # 更改活动状态
  419. if url == 'statusChange':
  420. checkIn = CheckIn
  421. if not checkGET(request, 'status'):
  422. return render(request, 'checkIn/directPage.html', {'alertMsg': 'status错误', 'dirLink': '/'})
  423. if not checkGET(request, 'c_ID'):
  424. return render(request, 'checkIn/directPage.html',
  425. {'alertMsg': '没有输入cID或者cID错误', 'dirLink': '/checkIn/logout'})
  426. checkIn.ID = request.GET['c_ID']
  427. checkIn = CheckIn.searchByID(checkIn)
  428. if checkIn == None:
  429. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  430. allowedStatus = {'draft': '准备中', 'active': '进行中', 'pause': '暂停'}
  431. if request.GET['status'] in allowedStatus.keys():
  432. # 判断当前c_ID下item是否为空
  433. item = Item()
  434. item.c_ID = request.GET['c_ID']
  435. item = Item.searchByC_ID(item)
  436. if len(item) == 0:
  437. return render(request, 'checkIn/directPage.html', {'alertMsg': '项目收集信息为空,请添加至少一项。',
  438. 'dirLink': '/checkIn/checkInDetail/?ID=%s' % (
  439. checkIn.ID)})
  440. else:
  441. checkIn.status = request.GET['status']
  442. CheckIn.updateByID(checkIn)
  443. statusDesc = '反馈收集已经更改成%s状态了' % (allowedStatus[checkIn.status])
  444. return render(request, 'checkIn/directPage.html',
  445. {'alertMsg': statusDesc, 'dirLink': '/checkIn/public/?ID=%s' % (checkIn.ID)})
  446. else:
  447. return render(request, 'checkIn/directPage.html', {'alertMsg': '参数错误', 'dirLink': '/checkIn/logout'})
  448. # 删除checkIn
  449. if url == 'deleteCheckIn':
  450. checkIn = CheckIn()
  451. if not checkGET(request, 'c_ID'):
  452. return render(request, 'checkIn/directPage.html',
  453. {'alertMsg': '没有输入cID或者cID错误', 'dirLink': '/checkIn/logout'})
  454. checkIn.ID = request.GET['c_ID']
  455. checkIn = CheckIn.searchByID(checkIn)
  456. if checkIn is None:
  457. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  458. if (not checkCorrectO_ID(request, checkIn.o_ID)) or checkIn is None:
  459. return render(request, 'checkIn/directPage.html',
  460. {'alertMsg': 'c_ID有错误,请重新登录。', 'dirLink': '/checkIn/logout'})
  461. checkIn.status = 'delete'
  462. CheckIn.updateByID(checkIn)
  463. return HttpResponseRedirect('/checkIn/main')
  464. # 删除Item
  465. if url == 'deleteItem':
  466. if not checkGET(request, 'itemID'):
  467. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入itemID', 'dirLink': '/'})
  468. item = Item
  469. item.ID = request.GET.get('itemID')
  470. item = Item.searchByID(item)
  471. c_ID = item.c_ID
  472. if (not checkCorrectO_ID(request, item.o_ID)) or item == None:
  473. return render(request, 'checkIn/directPage.html',
  474. {'alertMsg': 'c_ID有错误,请重新登录。', 'dirLink': '/checkIn/logout'})
  475. if Item.deleteByID(item):
  476. return HttpResponseRedirect('/checkIn/newItems/?ID=%s' % (c_ID))
  477. else:
  478. return HttpResponse('系统错误。')
  479. # 删除活动数据
  480. if url == "deleteContent":
  481. if not checkGET(request, 'c_ID'):
  482. return render(request, 'checkIn/directPage.html',
  483. {'alertMsg': '没有输入cID或者cID错误', 'dirLink': '/checkIn/logout'})
  484. # 判断是不是本人的checkIn
  485. checkIn = CheckIn()
  486. checkIn.ID = request.GET['c_ID']
  487. checkIn = CheckIn.searchByID(checkIn)
  488. if checkIn == None:
  489. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  490. if checkIn.o_ID != request.session['loginID']:
  491. del checkIn
  492. return render(request, 'checkIn/directPage.html', {'alertMsg': '非本人的活动项目!', 'dirLink': '/checkIn/logout'})
  493. userContent = UserContent()
  494. userContent.c_ID = request.GET['c_ID']
  495. if UserContent.clearByC_ID(userContent):
  496. checkIn.status = 'draft' # 重置checkIn的状态为Draft
  497. CheckIn.updateByID(checkIn)
  498. del checkIn
  499. del userContent
  500. return HttpResponseRedirect('/checkIn/checkInDetail/?ID=%s' % (request.GET['c_ID']))
  501. # 打印版本
  502. if url == 'print':
  503. checkIn = CheckIn
  504. if not checkGET(request, 'c_ID'):
  505. return render(request, 'checkIn/directPage.html', {'alertMsg': '没有输入ID或者ID错误', 'dirLink': '/'})
  506. checkIn.ID = request.GET['c_ID']
  507. checkIn = CheckIn.searchByID(checkIn)
  508. if checkIn == None:
  509. return render(request, 'checkIn/directPage.html', {'alertMsg': '这个ID不存在。', 'dirLink': '/'})
  510. else:
  511. if not PRODUCTION_ENVIRONMENT:
  512. qrcode_prefix = '/static/media/qrcode/'
  513. else:
  514. from .setting import QR_CODE_URL_PREFIX
  515. qrcode_prefix = QR_CODE_URL_PREFIX
  516. img_url = qrcode_prefix + 'c_ID_%s.png' % (checkIn.ID) # 需要在服务器上添加checkIn_media为静态目录
  517. return render(request, 'checkIn/print.html',
  518. {'url': url, 'image': img_url, 'description': checkIn.description})
  519. # 排序移动
  520. if url == 'itemMove':
  521. item = Item
  522. item.ID = request.POST.get('item_id')
  523. original_item_id = request.POST.get('item_id')
  524. item = item.searchByID(item)
  525. items = item.search_by_checkIn(item.c_ID)
  526. for i, item in enumerate(items):
  527. print(i)
  528. # print(item.timestamp)
  529. if item.ID == int(original_item_id): # 找到目标
  530. if request.POST.get('direction') == 'up': # 如果是向上替换
  531. if i == 0:
  532. break # 如果排序第一个,就跳出
  533. else:
  534. target_item = Item.search_by_ID(items[i-1].ID)
  535. origin_item = Item.search_by_ID(items[i].ID)
  536. temp_timestamp = origin_item.timestamp
  537. origin_item.timestamp = target_item.timestamp
  538. target_item.timestamp = temp_timestamp
  539. origin_item.save()
  540. target_item.save()
  541. break
  542. if request.POST.get('direction') == 'down': # 如果是向上替换
  543. if i == len(items)-1:
  544. break # 如果排序最后一个,就跳出
  545. else:
  546. target_item = Item.search_by_ID(items[i+1].ID)
  547. origin_item = Item.search_by_ID(items[i].ID)
  548. temp_timestamp = origin_item.timestamp
  549. origin_item.timestamp = target_item.timestamp
  550. target_item.timestamp = temp_timestamp
  551. origin_item.save()
  552. target_item.save()
  553. break
  554. return HttpResponse('change sequence successful.')
  555. def index(request):
  556. # Homepage
  557. return render(request, 'checkIn/index.html')
  558. def index_pjh(request):
  559. # Homepage
  560. return render(request, 'checkIn/index_pjh.html')