views.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from django.shortcuts import render, HttpResponse
  2. from django.http import HttpRequest, JsonResponse
  3. from django.views.decorators.http import require_POST, require_GET, require_http_methods
  4. from django.contrib.auth.models import User
  5. from django.contrib.auth import authenticate, login as auth_login, logout
  6. # from django.contrib.sessions import S
  7. # from django.contrib.auth.decorators import login_required
  8. import simplejson
  9. from messages import Messages
  10. from functools import wraps
  11. # 装饰器 验证账号
  12. def login_required(view_func):
  13. @wraps(view_func)
  14. def wrapper(request, *args, **kwargs):
  15. if request.user.is_authenticated:
  16. return view_func(request, *args, **kwargs)
  17. else:
  18. return HttpResponse(status=401)
  19. return wrapper
  20. # # 包装函数 装饰器
  21. # def request_methods(methods):
  22. # def method(func):
  23. # def wrapper(request, *args, **kwargs):
  24. # if request.method.lower() in methods:
  25. # ret = func(request, *args, **kwargs)
  26. # return ret
  27. # else:
  28. # return JsonResponse({}, status=405)
  29. # return wrapper
  30. # return method
  31. @require_POST
  32. def reg(request: HttpRequest):
  33. try:
  34. payload = simplejson.loads(request.body)
  35. username = payload['username']
  36. count = User.objects.filter(username=username).count()
  37. if count > 0:
  38. return JsonResponse(Messages.USER_EXISTS)
  39. username = username
  40. email = payload['email']
  41. password = payload['password']
  42. user = User.objects.create_user(username, email, password)
  43. return JsonResponse({}, status=201)
  44. except Exception as e:
  45. print(e)
  46. return JsonResponse(Messages.BAD_REQUEST, status=200)
  47. @require_POST
  48. def user_login(request: HttpRequest):
  49. try:
  50. payload = simplejson.loads(request.body)
  51. username = payload['username']
  52. password = payload['password']
  53. # 判断用户是否存在
  54. user = authenticate(username=username, password=password)
  55. if user is None:
  56. return JsonResponse(Messages.USER_NOT_EXISTS)
  57. auth_login(request, user)
  58. session = request.session
  59. session.set_expiry(30)
  60. session['userinfo'] = {
  61. 'id': request.user.id,
  62. 'username': request.user.username
  63. }
  64. response = HttpResponse(status=204)
  65. # response.set_cookie('username')
  66. return response
  67. except Exception as e:
  68. print(e)
  69. return JsonResponse({}, status=200)
  70. @login_required
  71. def user_login_out(request: HttpRequest):
  72. logout(request)
  73. return HttpResponse(status=302)
  74. class SimpleMiddleware:
  75. def __init__(self, get_response):
  76. self.get_response = get_response
  77. def __call__(self, request):
  78. response = self.get_response(request)
  79. return response
  80. def process_view(self, request, view_func, view_args, view_kwargs):
  81. return None