mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-31 07:57:55 +03:00 
			
		
		
		
	Minor cleaning up on View
This commit is contained in:
		
							parent
							
								
									027792c981
								
							
						
					
					
						commit
						c73d0e1e39
					
				|  | @ -87,9 +87,7 @@ else: | |||
|         raise ImportError("User model is not to be found.") | ||||
| 
 | ||||
| 
 | ||||
| # First implementation of Django class-based views did not include head method | ||||
| # in base View class - https://code.djangoproject.com/ticket/15668 | ||||
| if django.VERSION >= (1, 4): | ||||
| if django.VERSION >= (1, 5): | ||||
|     from django.views.generic import View | ||||
| else: | ||||
|     from django.views.generic import View as _View | ||||
|  | @ -97,6 +95,8 @@ else: | |||
|     from django.utils.functional import update_wrapper | ||||
| 
 | ||||
|     class View(_View): | ||||
|         # 1.3 does not include head method in base View class | ||||
|         # See: https://code.djangoproject.com/ticket/15668 | ||||
|         @classonlymethod | ||||
|         def as_view(cls, **initkwargs): | ||||
|             """ | ||||
|  | @ -126,11 +126,15 @@ else: | |||
|             update_wrapper(view, cls.dispatch, assigned=()) | ||||
|             return view | ||||
| 
 | ||||
| # Taken from @markotibold's attempt at supporting PATCH. | ||||
| # https://github.com/markotibold/django-rest-framework/tree/patch | ||||
| http_method_names = set(View.http_method_names) | ||||
| http_method_names.add('patch') | ||||
| View.http_method_names = list(http_method_names)  # PATCH method is not implemented by Django | ||||
|         # _allowed_methods only present from 1.5 onwards | ||||
|         def _allowed_methods(self): | ||||
|             return [m.upper() for m in self.http_method_names if hasattr(self, m)] | ||||
| 
 | ||||
| 
 | ||||
| # PATCH method is not implemented by Django | ||||
| if 'patch' not in View.http_method_names: | ||||
|     View.http_method_names = View.http_method_names + ['patch'] | ||||
| 
 | ||||
| 
 | ||||
| # PUT, DELETE do not require CSRF until 1.4.  They should.  Make it better. | ||||
| if django.VERSION >= (1, 4): | ||||
|  |  | |||
|  | @ -38,10 +38,9 @@ class APIView(View): | |||
|     @property | ||||
|     def allowed_methods(self): | ||||
|         """ | ||||
|         Return the list of allowed HTTP methods, uppercased. | ||||
|         Wrap Django's private `_allowed_methods` interface in a public property. | ||||
|         """ | ||||
|         return [method.upper() for method in self.http_method_names | ||||
|                 if hasattr(self, method)] | ||||
|         return self._allowed_methods() | ||||
| 
 | ||||
|     @property | ||||
|     def default_response_headers(self): | ||||
|  | @ -69,7 +68,8 @@ class APIView(View): | |||
| 
 | ||||
|     def http_method_not_allowed(self, request, *args, **kwargs): | ||||
|         """ | ||||
|         Called if `request.method` does not correspond to a handler method. | ||||
|         If `request.method` does not correspond to a handler method, | ||||
|         determine what kind of exception to raise. | ||||
|         """ | ||||
|         raise exceptions.MethodNotAllowed(request.method) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user