python - 如何将我当前的 django 应用程序转换为 REST API?
问题描述
我需要将我当前的 django 应用程序转换为 REST API,该应用程序是一个带有电子邮件和电话号码验证的 UserCreationForm。但首先我需要将文本字段注册到 django 管理站点以获得电话号码、电子邮件和密码字段。但是,在“admin.site.register(UserRegisterForm)”的 admin.py 中,当我运行 python manage.py makemigrations 时,发生错误,并指出 TypeError: 'ModelFormMetaclass' object is not iterable。我不确定 admin.site 是否不接受任何 UserForms 中的字段,它们只接受模型。这是我的代码:
/* forms.py */
import re
import phonenumbers
from phonenumbers import carrier
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from validate_email import validate_email
# from django.db import models
# from django_countries.fields import CountryField, countries
# from phonenumber_field.formfields import PhoneNumberField
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
# phone_number = PhoneNumberField()
phone_number = forms.CharField(max_length=100)
# country = CountryField(blank_label='Select Country').formfield()
country = forms.CharField(max_length=2)
class Meta:
model = User
fields = ['username', 'email', 'country', 'phone_number']
def clean_email(self):
email = self.cleaned_data.get("email")
if not validate_email(email, check_mx=True, verify=True):
raise forms.ValidationError("Invalid email")
return email
def clean_phone_number(self):
phone_number = self.cleaned_data.get("phone_number")
clean_number = re.sub("[^0-9&^+]", "", phone_number)
# alpha_2 = self.cleaned_data.get("country")
alpha_2 = self.cleaned_data.get("country")
z = phonenumbers.parse(clean_number, "%s" % (alpha_2))
if len(clean_number) > 15 or len(clean_number) < 3:
raise forms.ValidationError(
"Number cannot be more than 15 or less than 3")
if not phonenumbers.is_valid_number(z):
raise forms.ValidationError(
"Number not correct format or non-existent")
if carrier.name_for_number(z, "en") == '':
raise forms.ValidationError("Please enter a mobile number")
return phonenumbers.format_number(
z, phonenumbers.PhoneNumberFormat.E164)
/* admin.py */
from django.contrib import admin
from .forms import UserRegisterForm
admin.site.register(UserRegisterForm)
# Register your models here.
请告诉我应该对我当前的代码进行哪些更改,并告诉我我做错了什么。
解决方案
恐怕您不能真正将表单(前端组件)“转换”为 REST-API(后端接口)。这就像让美发师用剪刀把头发剪得更长。
但是.. 您可以在新的 django-REST-project 中使用您的 models.py。
建议:
- 启动一个新的 django 项目并添加所需的应用程序(使用 django cli)。
安装 django rest ( https://www.django-rest-framework.org/#installation )
pip install djangorestframework
并将 ('django_rest') 添加到已安装的应用程序
(settings.py)- 将代码从 model.py 复制到新应用的 model.py 中
- 创建一个(模型)序列化程序(检查模型输入/输出的所有数据)
- 为每个端点创建视图(这是您的界面)
- 跑
python manage.py makemigrations
- 跑
python manage.py migrate
- 你现在有一个工作的rest-api!
最后:您的管理站点使您能够(视觉上)与您的模型及其数据进行交互。它适用于您网站的管理员,它不会做任何其他事情。
推荐阅读
- dbeaver - 在 DBeaver 中,如何将多个查询的结果导出到不同的文件中?
- amazon-web-services - 如何访问托管在 Linux EC2 实例上的 Shiny 仪表板?
- laravel - 是什么导致了这个错误,这个项目在另一台服务器上完全正常运行?
- python - smop 在 MATLAB 中翻译 >= 语句时出现问题
- python - 同时迭代列表和变量
- angular - Angular Elements 错误:Zone.js 检测到 ZoneAwarePromise
- reactjs - 近乎空的反应应用程序中的元素类型错误
- php - 为什么在我提交注册表时它给我错误
- python - Terraform,Python 外部提供者不提供嵌套对象
- ocaml - ocaml 多态变体类型 推断类型太笼统