我正在学习用户登录和注册课程,遇到此错误,我不知道如何修复detail": "Method \"GET\" not allowed.
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('users/login/', views.MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
path('users/register/', views.registerUser, name='register'),
path('users/profile/', views.getUserProfile, name="users-profile"),
path('users/', views.getUsers, name="users"),
]
views.py
@api_view(['POST'])
def registerUser(request):
data = request.data
user = User.objects.create(
first_name = data['name'],
username = data['email'],
email = data['email'],
password = make_password(data['password'])
)
serializer = UserSerializerWithToken(user, many=False)
return Response(serializer.data)
serializers.py
class UserSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField(read_only=True)
_id = serializers.SerializerMethodField(read_only=True)
isAdmin = serializers.SerializerMethodField(read_only=True)
class Meta:
model = User
fields = ['id', '_id', 'username', 'email', "name", "isAdmin"]
def get__id(self, obj):
return obj.id
def get_isAdmin(self, obj):
return obj.is_staff
def get_name(self, obj):
name = obj.first_name
if name == '':
name = obj.email
return name
class UserSerializerWithToken(UserSerializer):
token = serializers.SerializerMethodField(read_only=True)
class Meta:
model = User
fields = ['id', '_id', 'username', 'email', "name", "isAdmin", 'token']
def get_token(self, obj):
token = RefreshToken.for_user(obj)
return str(token.access_token)
我不确定这是否是问题所在,但我看到有人说,由于在www.example.com中views.py我的视图是@api_view(['POST'])
,因此无法在www.example.com中以通常urls.py的方式调用它。
4条答案
按热度按时间vsdwdz231#
由于您的API设置为只接受POST方法,因此您不能简单地将URL输入浏览器。api_view(['POST'])
尝试使用POST方法在postman中运行API
https://www.django-rest-framework.org/api-guide/views/#api_view
或添加以下内容
3htmauhk2#
如错误所示,您的寄存器API应该是
POST
,而不是GET
。如果您使用GET方法调用您的register API,则会出现上述错误。
您可以简单地使用
curl
命令进行测试(假设在端口8000上运行服务器)。这将导致“方法不允许”错误
这会很好的
dauxcl2d3#
当我们通过浏览器调用时,默认方法是
GET
。要通过提供适当的方法和数据来测试这些端点,请使用如下的rest API客户端curl
way @fullswing answer, if you want minimal installationbaubqpgj4#
在你的API_view中你没有使用GET方法,这就是它给你错误的原因。请使用GET方法,它应该工作。检查下面的参考