python - 无法使用用户个人资料注册用户
问题描述
我在注册用户用户资料和患者时遇到问题,同时出现类似错误
{
"profile": [
"This field is required."
],
"patient": [
"This field is required."
]
}
或bad request 400 77
在我的 cmd
我不明白怎么了
我的代码
序列化器.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email')
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('date_of_birth',)
class PatientSerializer(serializers.ModelSerializer):
class Meta:
model = Patient
fields = ('blood_type',)
class RegisterSerializer(serializers.ModelSerializer):
profile = ProfileSerializer(required = True)
patient = PatientSerializer(required = True)
class Meta:
model = User
fields = ('id', 'username', 'email', 'password','profile','patient',)
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
profile_data = validated_data.pop('profile')
patient_data = validated_data.pop('patient')
user = User(**validated_data)
username = user.username
password = validated_data.pop('password')
user.set_password(password)
user.save()
profile = Profile.objects.create(user=user,name=username,**profile_data)
Patient.objects.create(profile=profile,**patient_data)
return user
视图.py
class RegisterAPIView(generics.GenericAPIView):
serializer_class = RegisterSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)[1]
})
我的注册表在反应
class RegisterForm extends Component {
renderField = ({ input, label,className, type, meta: { touched, error } }) => {
return (
<div className={`field ${touched && error ? 'error' : ''}`}>
<label>{label}</label>
<input {...input} type={type} className={"form-control"} />
{touched && error && (
<span className='ui pointing red basic label'>{error}</span>
)}
</div>
);
};
onSubmit = formValues => {
this.props.register(formValues);
};
render() {
if (this.props.isAuthenticated) {
return <Redirect to='/' />;
}
return (
<div className='ui container'>
<div className='ui segment'>
<form
onSubmit={this.props.handleSubmit(this.onSubmit)}
className='ui form'
>
<Field
name='username'
type='text'
component={this.renderField}
label='Your Name'
validate={[required, minLength3, maxLength15]}
/>
<Field
name='email'
type='email'
component={this.renderField}
label='Email'
validate={required}
/>
<Field
name='password'
type='password'
component={this.renderField}
label='Password'
validate={required}
/>
<Field
name='password2'
type='password'
component={this.renderField}
label='Confirm Password'
validate={[required, passwordsMatch]}
/>
<Field
name='date_of_birth'
type='date'
component={this.renderField}
label='YOUR BIRTH DATE'
validate={[required, minDate1899,MaxDate]}
/>
<Field name='Blood_type'
type='text'
component={"select"}
label='Your Blood Type'
style={{ marginRight: '1rem' }}
validate={[required]}>
<option>Your Blood Type</option>
<option value="1-">1-</option>
<option value="1+">1+</option>
<option value="2-">2-</option>
<option value="2+">2+</option>
<option value="3+">3+</option>
<option value="3-">3-</option>
<option value="4-">4-</option>
<option value="4+">4+</option>
</Field>
<button style={{ marginTop: '1rem' }} className='btn btn-primary'>Register</button>
</form>
<p style={{ marginTop: '1rem' }}>
Already have an account? <Link to='/login'>Login</Link>
</p>
</div>
</div>
);
}
}
以及我在 auth.js 中的注册方法
/ REGISTER USER
export const register = ({ username, email, password,date_of_birth,blood_type }) => async dispatch => {
// Headers
const config = {
headers: {
'Content-Type': 'application/json'
}
};
// Request Body
const body = JSON.stringify({ username, email, password,date_of_birth,blood_type});
try {
const res = await axios.post('http://127.0.0.1:8000/api/register', body, config);
dispatch({
type: REGISTER_SUCCESS,
payload: res.data
});
} catch (err) {
dispatch({
type: REGISTER_FAIL
});
dispatch(stopSubmit('registerForm', err.response.data));
}
};
解决方案
推荐阅读
- git - 从 fork 到上游的 Git 独立提交
- maven - Fabric8:使用外部 pod 部署 java 应用程序
- python - 只能将一个结果写入 csv 文件
- web-scraping-language - 网页抓取语言:如何进行分页抓取?
- c# - 同时流式传输来自不同客户端的大数据
- sql-server - 自动为 SELECT 语句中的所有列生成别名
- scala - 有没有办法使伴生对象函数私有并将伴生对象导入类然后访问该函数?
- javascript - express.js“next()”参数的确切性质
- javascript - 在这种情况下如何执行嵌套循环?
- node-red - 如何从 node-red 控制“Google Home”设备?