decorators.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from functools import wraps
  2. from urllib.parse import urlparse
  3. from django.conf import settings
  4. from django.shortcuts import resolve_url
  5. from django.http import JsonResponse
  6. from .models import User, LoginToken
  7. def user_passes_test(test_func, error):
  8. def decorator(view_func):
  9. @wraps(view_func)
  10. def _wrapped_view(request, *args, **kwargs):
  11. if test_func(request):
  12. return view_func(request, *args, **kwargs)
  13. return JsonResponse({'code': 401, 'error': error}, status=401)
  14. return _wrapped_view
  15. return decorator
  16. def login_required(function=None, error='error'):
  17. """
  18. Decorator for views that checks that the _user is logged in, redirecting
  19. to the log-in page if necessary.
  20. """
  21. def is_login(request):
  22. username = request.data.get('username', '')
  23. token = request.data.get('token', '')
  24. try:
  25. user = User.objects.get(username='username')
  26. if user.check_token(token):
  27. user.tokens.get(token=token)
  28. return True
  29. except:
  30. return False
  31. return False
  32. actual_decorator = user_passes_test(is_login, '请登录')
  33. if function:
  34. return actual_decorator(function)
  35. return actual_decorator