抱歉,这似乎是一个愚蠢的问题,但我在此问题上花费了很多时间,无法找到理想的解决方法。
我有使用Django模板呈现的Django表单。现在,我想将React组件添加到表单字段之一(从长远来看,可能要添加到多个字段)。
根据我到目前为止所读的内容,最好不要将Django模板与React渲染混合使用,而让Django仅用作将JSON数据发送到React的后端API,而React则负责整个表单渲染。所以我现在正试图完全通过React重新渲染我的表单。现在,我创建了serializers.py而不是forms.py,以定义要发送到React的数据,并在我的环境中设置了Django
Rest Framework。现在,我试图弄清楚如何发送这些数据。有一些不错的在线教程(和SO帖子)谈到了将Django /
DRF与React集成在一起,但还没有找到一个通过React和DRF端到端表单渲染的示例。特别,谁能让我知道我真正在我的视图中写了什么,然后对尝试获取表单数据的React的GET请求有用吗?网络参考或所需的主要步骤应该足以让我入门(并深入研究文档)。
更新:在此处还添加了serializers.py代码的简化版本:
from .models import Entity
from rest_framework import serializers
class EntitySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Entity
fields = ['name', 'role', 'location']
首先,我认为您需要检查有关具有多个输入的表单的相关React文档。它为您提供了有关在React端应该如何组织事物的基本思路。
关于从服务器获取数据,您可以在中尝试以下操作componentDidMount
:
componentDidMount() {
// Assuming you are using jQuery,
// if not, try fetch().
// Note that 2 is hardcoded, get your user id from
// URL or session or somewhere else.
$.get('/api/profile/2/', (data) => {
this.setState({
formFields: data.fields // fields is an array
});
});
}
然后,您可以使用以下render
方法在方法中创建html输入元素:
render () {
let fields = this.state.formFields.map((field) => {
return (
<input type="text" value={field.value} onChange={(newValue) => {/* update your state here with new value */ }} name={field.name}/>
)
});
return (
<div className="container">
<form action="">
{fields}
<button onClick={this.submitForm.bind(this)}>Save</button>
</form>
</div>
)
}
这是您的submitForm
方法:
submitForm() {
$.post('/api/profile/2/', {/* put your updated fields' data here */}, (response) => {
// check if things done successfully.
});
}
更新:
这是untested-but-should-work
您的DRF视图的示例:
from rest_framework.decorators import api_view
from django.http import JsonResponse
from rest_framework.views import APIView
class ProfileFormView(APIView):
# Assume you have a model named UserProfile
# And a serializer for that model named UserSerializer
# This is the view to let users update their profile info.
# Like E-Mail, Birth Date etc.
def get_object(self, pk):
try:
return UserProfile.objects.get(pk=pk)
except:
return None
# this method will be called when your request is GET
# we will use this to fetch field names and values while creating our form on React side
def get(self, request, pk, format=None):
user = self.get_object(pk)
if not user:
return JsonResponse({'status': 0, 'message': 'User with this id not found'})
# You have a serializer that you specified which fields should be available in fo
serializer = UserSerializer(user)
# And here we send it those fields to our react component as json
# Check this json data on React side, parse it, render it as form.
return JsonResponse(serializer.data, safe=False)
# this method will be used when user try to update or save their profile
# for POST requests.
def post(self, request, pk, format=None):
try:
user = self.get_object(pk)
except:
return JsonResponse({'status': 0, 'message': 'User with this id not found'})
e_mail = request.data.get("email", None)
birth_date = request.data.get('birth_date', None)
job = request.data.get('job', None)
user.email = e_mail
user.birth_date = birth_date
user.job = job
try:
user.save()
return JsonResponse({'status': 1, 'message': 'Your profile updated successfully!'})
except:
return JsonResponse({'status': 0, 'message': 'There was something wrong while updating your profile.'})
这是与此视图相关的URL:
urlpatterns = [
url(r'^api/profile/(?P<pk>[0-9]+)/$', ProfileFormView.as_view()),
]
问题内容: 我对React有点困惑,我很喜欢它。它比Angular更为冗长(带有|过滤器的ng-repeat是无价的),但是还可以。 让我烦恼的是,我应该如何将React与Django模板一起使用。我应该将所有JavaScript连同“ HTML”标记一起放入模板中。 实施Angular非常无缝。我只是将一些属性放入template / django表单类中,然后在单独的文件中编写了javascr
上一节我们主要介绍了 Django 中 Form 类的相关属性和方法,本小节中会继续介绍 Field 类的相关属性与方法,最后还有如何实现自定义的 Field。 1. Field 相关基础 1.1 Field 的 clean() 方法 通过上面两个例子演示,我们对 Django 中的表单应该有了初步的了解。对于 Form 类,最重要的就是定义它的字段(Field),且每个字段都有自定义验证逻辑以及
问题内容: Django的新手,ReactJS的新手。我一直在研究AngularJS和ReactJS,但是决定使用ReactJS。尽管AngularJS拥有更多的市场份额,但它似乎正在逐步超越AngularJS的知名度,并且据说ReactJS更快地被接受。 撇开所有垃圾,我开始学习Udemy的课程,并看了几段视频后,查看它与Django的集成程度似乎很重要。那就是当我不可避免地碰壁只是要启动并运行
我正在做我的第一个网站使用reactjs,我试图完成联系表格页面,并带我2天到目前为止。我使用nodemailer和配置部分,我使用Gmail帐户与OAuth2. 用户将发送姓名,电子邮件和消息,表单将发送到我的电子邮件地址。在我按下发送按钮后,url更改为http://localhost:3000/contact(正如我在文件中的目标),但没有任何内容出现在页面中,甚至在控制台中也没有。 我不知
问题内容: 我正在尝试使用ModelForm添加数据。它工作正常,除了ForeignKey下拉列表显示所有值,我只希望它显示与已登录用户相关的值。 这是我要添加的记录ExcludedDate的模型: 这是类别的模型,该表是包含我想由用户限制的关系的表: 最后,表单代码: 如何获取仅显示类别子集的表单,其中category.user等于登录用户? 问题答案: 您可以在 init中* 自定义表格 *
本文向大家介绍Python中使用django form表单验证的方法,包括了Python中使用django form表单验证的方法的使用技巧和注意事项,需要的朋友参考一下 一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; 前端提交后台获取: 这样就完成了基本的功能,基本上可以用了。 但是,如果用户输入并未