django - 如何使用注册和登录制作 Django API
问题描述
我正在尝试在 Django 中创建一个 API,仅在用户登录时才将员工信息作为 JSON 返回。
我的问题是,如何在不使用 html 和表单的情况下进行用户注册和登录选项?有没有办法让我创建一个注册选项,接收客户端通过 JSON 发送的输入。例如,对 localhost:example/register/ 的 POST 请求包含:
{"username" : "examle", "email" : "example", "password" : "example", "password2" : "example"}?
这将如何在 views.py 中实现?
任何帮助,将不胜感激。谢谢你。
解决方案
是的,有一种方法,Django Rest Framework 几乎包含了你需要的一切。
要回答有关登录的第一个问题,您将添加一个权限类以仅允许经过身份验证的人访问。
要回答关于注册的 API 问题,您需要在任何相关的 URL 文件中创建一个 API 端点;我把我的用户应用程序:
urlpatterns = [
path('register/', register_user_view, name="register"),
...
]
您需要创建一个视图和序列化程序来摄取您发送的 JSON:
@api_view(['POST',])
def register_user_view(request):
if request.method == 'POST':
serializer = RegistrationSerializer(data=request.data)
data = {}
if serializer.is_valid():
account = serializer.save()
data['response'] = "successfully registered a new user."
data['email'] = account.email
data['response'] = account.username
else:
data = serializer.errors
# data = serializer.data
return Response(data)
序列化器:
class RegistrationSerializer(serializers.ModelSerializer):
password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)
class Meta:
model = CustomUser
fields = ['email', 'username', 'password', 'password2']
extra_kwargs = {
'password': {'write_only': True}
}
def save(self):
account = CustomUser(
email=self.validated_data['email'],
username=self.validated_data['username'],
)
password = self.validated_data['password']
password2 = self.validated_data['password2']
if password != password2:
raise serializers.ValidationError({'password': 'Passwords do not match!'})
account.set_password(password)
account.save()
return account
推荐阅读
- sql-server - 从 SSIS 加载文件时在表中插入俄语字符
- oracle - Oracle 中的函数和触发器
- android - Kotlin - 使用 runBlockingTest 延迟测试内部协程
- c - 如何逐个计算无理数的位数?
- javascript - onmouseover 和 onmouseleave 在图像映射上随机触发
- docker - Pass ARGs in docker ENTRYPOINT
- python - GAE Python Unittest Runner
- twig - 检查字符串是否匹配单词
- python-3.x - 在python3中返回以下日期和月份的函数
- android - 如何设置 GOOGLE_APPLICATION_CREDENTIALS?