Advertisement
Guest User

Untitled

a guest
Mar 30th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. from django.shortcuts import render
  2. import django.http
  3. from django.contrib.auth import authenticate
  4. from django.views.decorators.csrf import csrf_exempt
  5. from rest_framework.authtoken.models import Token
  6. from django.contrib.auth.models import User
  7. from rest_framework.decorators import api_view, permission_classes
  8. from rest_framework.permissions import AllowAny
  9. from rest_framework.response import Response
  10. import datetime
  11.  
  12. # Create your views here.
  13.  
  14. def index(request):
  15. """
  16. Возвращает ОК если сервер работает
  17. """
  18. return django.http.HttpResponse('ok')
  19.  
  20. @csrf_exempt
  21. @api_view(["POST"])
  22. @permission_classes((AllowAny,))
  23. def login(request):
  24. """
  25. API, позволяющий авторизовать пользователей,
  26. дает токен для аутентифкации по логину и паролю.
  27. В дату кладем имя и пароль в формате JSON.
  28.  
  29. Админка: {"username":"alex","password":"qwerty11111111"}
  30.  
  31. :param: request (JSON)
  32. :return: auth token
  33. """
  34. username = request.data.get("username")
  35. password = request.data.get("password")
  36. user = authenticate(username=username, password=password)
  37. if user:
  38. token, _ = Token.objects.get_or_create(user=user)
  39. return Response({'token': token.key})
  40. else:
  41. return Response({'error': 'invalid username or password'})
  42.  
  43.  
  44. @csrf_exempt
  45. @api_view(["POST", "GET"])
  46. def test(request):
  47. """
  48. Тестовый API, позволяющий посмотреть имя пользователя,
  49. у которого есть токен.
  50. Токен должен лежать в заголовке HTTP запроса,
  51. а именно в <<Authorization : token 8de94977b46e402e4fb2d4921bd18353b2fff20e>>
  52. для отправки таких запросов руками используйте программку postman,
  53. но для debug'а можете просто выбирать случайного пользователя из модели и добавить декоратор
  54. allow any как в api/login
  55. Админка: {"username":"alex","password":"qwerty11111111"}
  56.  
  57. :param request (JSON):
  58. :return: username:
  59. """
  60. return Response({'username': request.user.username})
  61.  
  62. @csrf_exempt
  63. @api_view(["POST"])
  64. @permission_classes((AllowAny,))
  65.  
  66. def create_developer(username, email, password, deportament):
  67. Developer a
  68. a.username = username;
  69. a.deportament = deportament
  70. a.password = password
  71. a.email = email
  72.  
  73.  
  74. def registration(request):
  75. """
  76. Работает как api/login
  77.  
  78. :param request (JSON):
  79. :return: auth token:
  80. """
  81. username = request.data.get("username", None)
  82. password = request.data.get("password", None)
  83. email = request.data.get("email", None)
  84. user_type = request.data.get("user_type", None)
  85.  
  86. if username and password and email:
  87. if not User.objects.all().filter(username=username).exists():
  88. if not Email.objects.all().filter(email=email).exists():
  89. if user_type == "Developer":
  90. deportament = request.data.get("deportament", None)
  91. user.objects = User.objects.create_developer(username, email, password, deportament)
  92. used.deportament = deportament
  93. elif user_type == "Advertiser":
  94. user.objects = User.objects.create_advertiser(username, email, password, deportament)
  95. used.deportament = deportament
  96. else:
  97. user = User.objects.create_user(username, email, password)
  98. else:
  99. return Response({'error': 'profile with yours email is already exist'})
  100. else:
  101. return Response({'error': 'username already exist'})
  102. token, _ = Token.objects.get_or_create(user=user)
  103. return Response({'token': token.key})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement