def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) data = serializers.UserSerializer(instance=request.user).data return Response(data, status=status.HTTP_201_CREATED, headers=headers)
def register_user(self, request): user_data = request.data serializer = accounts_serializers.UserSerializer(data=user_data) serializer.is_valid(raise_exception=True) # run validate method serializer.save() # run create method user = accounts_models.User.objects.get(email=user_data['email']) token = RefreshToken.for_user(user).access_token try: current_site = get_current_site(request).domain relative_link = reverse('user-verify_email') absolute_url = 'http://' + current_site +\ relative_link + '?token=' + str(token) email_body = 'Hi ' + user.username + \ "\nClick on the link below to verify your email\n\n"\ + absolute_url payload = { 'email_body': email_body, 'to_email': [user.email], 'email_subject': "SMOKIN ACE EMAIL VERIFICATION" } notification.broad_cast_system_notification(payload) except Exception as e: print(e) pass return Response( {"details": 'successfully created an account', "token": serializer.data }, status=status.HTTP_201_CREATED)
def put(self, request, pk, format=None): account = self.get_object(pk) serializer = accounts_serializers.UserSerializer(account, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def user_api_login(request): """ 用户登录接口-POST """ # 获取输入的内容 if request.method == 'POST': # 表单验证 form = LoginForm(request.POST) # 如果通过了验证,执行登录 if form.is_valid(): user = form.do_login(request) # 返回内容:用户的信息(用户的基本信息、详细信息) profile = user.profile # 1对1的反向查询,返回一个profile对象 data = { 'user': serializers.UserSerializer(user).to_dict(), 'profile': serializers.UserProfileSerializer(profile).to_dict() } return http.JsonResponse(data) # return HttpResponse("oK") else: # 如果没有通过表单验证,返回表单的错误信息 err = json.loads(form.errors.as_json( )) # form.errors.as_json()就是一个json,通过.loads转换成python对象 return BadRequestJsonResponse( err) # 因为这个函数里要放入python对象,err里装的就是form里raise抛出的错误信息 else: # 请求不被允许 return MethodNotAllowedJsonResponse()
class ProfileSerializer(serializers.HyperlinkedModelSerializer): url = serializers.HyperlinkedIdentityField( view_name='employees:profile-detail') user = account_serializers.UserSerializer(read_only=True) positions = PositionHistorySerializer(many=True, read_only=True, source='positionhistory_set') add_position = serializers.SerializerMethodField() def get_add_position(self, instance) -> str: """Returns the full uri for the add position detail route Args: instance: A profile instance Returns: A URI string """ return reverse('employees:profile-add-position', kwargs={'pk': instance.pk}, request=self.context['request']) class Meta: model = employee_models.Profile fields = ('id', 'user', 'phone_number', 'github_user', 'birth_date', 'date_started', 'gender', 'race', 'age', 'years_worked', 'days_to_birthday', 'about_me', 'picture_uri', 'positions', 'add_position', 'url')
def get_response(self, request): """Return response for given view.""" user = request.user project_id = request.GET.get('project') if project_id: project = (models.Project.objects.filter( id=project_id).select_related('organization').first()) if not project: raise Http404() organization = project.organization else: organization = user.default_organization project = organization.project_set.get(default=True) logged_in = not user.is_anonymous response = {'logged_in': logged_in} if logged_in: userSerializer = serializers.UserSerializer(user) organizationSerializer = serializers.OrganizationSerializer( organization, many=False) projectSerializer = serializers.ProjectSerializer(project, many=False) response.update({ 'user': userSerializer.data, 'organization': organizationSerializer.data, 'project': projectSerializer.data, }) return response
def current_user(self, request: Request) -> Response: """List route to return the request user's details Args: request: A DRF request object Returns: A DRF response object """ serializer = account_serializers.UserSerializer(request.user, context={'request': request}) return Response(serializer.data)
def form_valid(self, form): """ 表单已经通过验证 """ result = form.modify(request=self.request) if result is not None: user, profile = result data = { 'user': serializers.UserSerializer(user).to_dict(), 'profile': serializers.UserProfileSerializer(profile).to_dict() } return http.JsonResponse(data, status=201) return ServerErrorJsonResponse()
def get(self, request): # 登录完成之后,Django会把user设置到request这个模块里去 # 获取用户信息 user = request.user # 用户:是游客吗? if not user.is_authenticated: # 返回401状态码 return UnauthorizedJsonResponse() else: # 返回详细信息 profile = user.profile data = { 'user': serializers.UserSerializer(user).to_dict(), 'profile': serializers.UserProfileSerializer(profile).to_dict() } return http.JsonResponse(data)
def post(self, request, *args, **kwargs ): if 'username' not in request.data or 'password' not in request.data: return Response("'username' and 'password' is needed", status=400) username = request.data['username'] password = request.data['password'] user = authenticate(username=username, password=password) if not user: return Response("'username' and 'password' incorrect", status=400) if not user.is_active: return Response("'username' and 'password' incorrect", status=400) token, created = Token.objects.get_or_create(user=user) value = User.objects.get(pk=user.id) serializer = accounts_serializers.UserSerializer(value) return Response({'token': token.key, 'user': serializer.data}, status=200)
def get_loggedin_user(request): serialized_user = ser.UserSerializer(request.user) return Response(serialized_user.get_data)
def get(self, request, pk, format=None): account = self.get_object(pk) serializer = accounts_serializers.UserSerializer(account) return Response(serializer.data, status=200)
class PollSerializer(serializers.ModelSerializer): created_by = user_serializer.UserSerializer(partial=True, required=False) class Meta: model = Poll fields = ['id', 'name', 'created_on', 'created_by']
def _serializer_user(self): self.data["user"] = serializers.UserSerializer(self._user).data