首先,我是Python和Django的新手,我试图通过单一函数和apis资源(Tastypie的ModelResources)来理解apis的优点/缺点。
我一直在研究Django项目并且一直在使用rest-framework。但是,我从服务器为每个api创建了每个函数。例如,这是我使用rest-framework编写的一个简单的寄存器函数:
@api_view(['POST'])
@permission_classes((AllowAny,))
@parser_classes((JSONParser,))
def register(request):
if request.data is not None:
try:
username = request.data['username']
password = request.data['password']
user = User.objects.create_user
(username=utils.encrypt(username),
password=utils.encrypt(password))
......
这是使用Tastypie的ModelResource的另一个注册示例:
class RegisterUserResource(ModelResource):
class Meta:
allowed_methods = ['post']
always_return_data = True
authentication = Authentication()
authorization = Authorization()
queryset = User.objects.all()
resource_name = 'register'
.......
def obj_create(self, bundle, **kwargs):
try:
username = bundle.data["username"]
password = bundle.data["password"]
if User.objects.filter(username=username):
raise CustomBadRequest(
code=status.HTTP_201_CREATED,
message="This username is taken"
)
# Create object
bundle.obj = User.objects.create_user(username=username, password=password)
bundle.obj.save()
# Create user profile object
UserInfo.objects.create(user=bundle.obj)
except KeyError:
raise CustomBadRequest(
code="missing_key",
message="Must provide {missing_key} when creating a user."
)
except User.DoesNotExist:
pass
return bundle
请帮助我了解这两种方式之间的区别以及哪种方式更好。我个人认为使用Tastypie的ModelResource非常复杂,有时很难控制对象的权限(我可以通过id修改任何对象,即使该对象不是由我创建的 - 我试图在Tastypie的文档中找到这些信息但是没有发现某些东西有关)..