Python Django和React在提交时总是错误的请求

Python Django和React在提交时总是错误的请求,python,reactjs,django,django-rest-framework,django-react,Python,Reactjs,Django,Django Rest Framework,Django React,我正在使用Django Rest框架和引导React开发一个电子处方Web应用程序。 但我面临一个错误,即POST 400(错误请求) 如何解决这个问题?顺便说一句,这是我的代码: 设置.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.c

我正在使用Django Rest框架和引导React开发一个电子处方Web应用程序。 但我面临一个错误,即POST 400(错误请求)

如何解决这个问题?顺便说一句,这是我的代码:

设置.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'corsheaders',
    
    'prescribe_app',
]

CORS_ORIGIN_ALLOW_ALL = True

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',

    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

@api_view(['GET', 'POST'])
def prescription_view(request):

    if request.method == 'GET':
        prescription = Prescription.objects.all()
        serializer = PrescriptionSerializerView(prescription, many=True)
        return Response(serializer.data)
    
    elif request.method == 'POST' :
        
        serializer = PrescriptionSerializerView(data=request.data)
        if serializer.is_valid():
            serializer.save()
        else:
            content = {'Error': 'Invalid data'}
            return Response(content,status=status.HTTP_400_BAD_REQUEST)
        return Response(serializer.data)
class PrescriptionSerializerView(serializers.ModelSerializer):
    class Meta:
        model = Prescription
        fields = ['drug_name' , 'dosage' , 'route', 'frequency', 'amount_dispensed', 'no_of_refills']
视图.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'corsheaders',
    
    'prescribe_app',
]

CORS_ORIGIN_ALLOW_ALL = True

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',

    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

@api_view(['GET', 'POST'])
def prescription_view(request):

    if request.method == 'GET':
        prescription = Prescription.objects.all()
        serializer = PrescriptionSerializerView(prescription, many=True)
        return Response(serializer.data)
    
    elif request.method == 'POST' :
        
        serializer = PrescriptionSerializerView(data=request.data)
        if serializer.is_valid():
            serializer.save()
        else:
            content = {'Error': 'Invalid data'}
            return Response(content,status=status.HTTP_400_BAD_REQUEST)
        return Response(serializer.data)
class PrescriptionSerializerView(serializers.ModelSerializer):
    class Meta:
        model = Prescription
        fields = ['drug_name' , 'dosage' , 'route', 'frequency', 'amount_dispensed', 'no_of_refills']
序列化程序.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'corsheaders',
    
    'prescribe_app',
]

CORS_ORIGIN_ALLOW_ALL = True

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',

    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

@api_view(['GET', 'POST'])
def prescription_view(request):

    if request.method == 'GET':
        prescription = Prescription.objects.all()
        serializer = PrescriptionSerializerView(prescription, many=True)
        return Response(serializer.data)
    
    elif request.method == 'POST' :
        
        serializer = PrescriptionSerializerView(data=request.data)
        if serializer.is_valid():
            serializer.save()
        else:
            content = {'Error': 'Invalid data'}
            return Response(content,status=status.HTTP_400_BAD_REQUEST)
        return Response(serializer.data)
class PrescriptionSerializerView(serializers.ModelSerializer):
    class Meta:
        model = Prescription
        fields = ['drug_name' , 'dosage' , 'route', 'frequency', 'amount_dispensed', 'no_of_refills']
Form.js

import React from  'react';
import { Row, Card, Col, Table, Form, Button} from 'react-bootstrap';


class FormPage extends React.Component{


    constructor(props){
        super(props);
        this.state = {
            prescriptionList: [],
            activeItem: {
                id:null,
                drug_name:'',
                dosage:'',
                route:'',
                frequency:'',
                amount_dispensed:'',
                no_of_refills:''

            },
            editing:false,
        }
            this.viewPrescription = this.viewPrescription.bind(this)
            this.handleChange = this.handleChange.bind(this)
            this.handleSubmit = this.handleSubmit.bind(this)
            this.getCookie = this.getCookie.bind(this)
            // this.deleteItem = this.deleteItem.bind(this)
            // this.startEdit = this.startEdit.bind(this)
            // this.strikeUnstrike = this.strikeUnstrike.bind(this)
    };

    getCookie(name) {
        let cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            const cookies = document.cookie.split(';');
            for (let i = 0; i < cookies.length; i++) {
                const cookie = cookies[i].trim();
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    
    // R E T R I E V I N G   D A T A  F R O M   A P I
    componentDidMount(){
        this.viewPrescription()
    }

    viewPrescription(){
    console.log('Fetching ...' )

        fetch('http://127.0.0.1:8000/api/prescription-view/')
            .then(response => response.json())
            .then(data =>
                // console.log("Prescription" , data)
            this.setState({
                prescriptionList:data
            })
        )
        
    }
    
    handleChange(e){
        var name = e.target.name
        var value = e.target.value
        console.log('Name:', name)
        console.log('Value:', value)

        this.setState({
            activeItem:{
                ...this.state.activeItem,
                title:value
            }
        })
    }

    // S U B M I T T I N G   D A T A  T O   A P I

    handleSubmit(e){
        e.preventDefault()
        // console.log('Prescription : ', this.state.achieveItem)

        var csrftoken = this.getCookie('csrftoken')

        // var url = 'http://127.0.0.1:8000/api/prescription-view/'

        fetch('http://127.0.0.1:8000/api/prescription-view/', {
            method: 'POST' ,
            headers: {
                'Content-type' : 'application/json',
                'X-CSRFToken' : csrftoken,
                
                },
                body: JSON.stringify(this.state.activeItem)
            }).then((response) =>  {
                    this.viewPrescription()
                    this.setState({
                    activeItem: {
                        id:null,
                        drug_name:'',
                        dosage:'',
                        route:'',
                        frequency:'',
                        amount_dispensed:'',
                        no_of_refills:'',
                    }
                    })
            }).catch(function(error){
                console.log('ERROR', error)
            })
        }
        
    

    render(){
        var prescriptionView = this.state.prescriptionList
        // var self = this
        return(
            <div style={{padding: '1rem'}}>
                <Card style={{ marginTop: '5px' }}>
                <Card.Header style={{backgroundColor: '#00A0DC', color: 'white'}}>Patient Information</Card.Header>
                    <Card.Body>
                        <Row>

                            <Col>
                                <h4>Donald Biden</h4>
                                <Card style={{padding: '10px', fontSize: '12px'}}>
                                <Table borderless size="sm">
                                
                                    <tbody>
                                        <tr>
                                        <td>Age</td>
                                        <td>:</td>
                                        <td>55 yrs old</td>
                                        </tr>
                                        <tr>
                                        <td>Address</td>
                                        <td>:</td>
                                        <td>San Pablo, Laguna</td>
                                        </tr>
                                        <tr>
                                        <td>Birthday</td>
                                        <td>:</td>
                                        <td>September 09, 1965</td>
                                        </tr>
                                    </tbody>
                                </Table>
                                </Card>
                                
                            </Col>

                            <Col>  
                            {prescriptionView.map(function(prescriptionView, index){
                                return(
                                    <div key={index}>
    
                                        <Card style={{ marginTop: '5px' , fontSize: '12px'}}>
                                            <Card.Header>Medication Information</Card.Header>
                                            <Card.Body>
                                            <Table borderless size="sm">
                                                <tbody>
                                                    <tr>
                                                    <td>Drug Name</td>
                                                    <td>:</td>
                                                    <td>{prescriptionView.drug_name}</td>
                                                    </tr>
                                                    <tr>
                                                    <td>Dosage</td>
                                                    <td>:</td>
                                                    <td>{prescriptionView.dosage} mgs</td>
                                                    </tr>
                                                    <tr>
                                                    <td>Route Taken</td>
                                                    <td>:</td>
                                                    <td>{prescriptionView.route}</td>
                                                    </tr>
                                                    <tr>
                                                    <td>Frequency</td>
                                                    <td>:</td>
                                                    <td>{prescriptionView.frequency}</td>
                                                    </tr>
                                                    <tr>
                                                    <td>Amount Dispensed</td>
                                                    <td>:</td>
                                                    <td>{prescriptionView.amount_dispensed}</td>
                                                    </tr>
                                                    <tr>
                                                    <td>No of Refills</td>
                                                    <td>:</td>
                                                    <td>{prescriptionView.amount_dispensed}</td>
                                                    </tr>
                                                </tbody>
                                            </Table>
                                            </Card.Body>
                                        </Card>
                                    </div>
                                    )
                            })}
                                
                            </Col>

                        </Row>
                    </Card.Body>
                </Card>

                <Card style={{ marginTop: '1rem', marginBottom: '5rem' }}>
                <Card.Header style={{backgroundColor: '#00A0DC', color: 'white'}}>Prescription Information</Card.Header>
                    <Card.Body style={{fontSize: '11px'}}>
                        <Form onSubmit={this.handleSubmit} id="form">
                            <Row>
                                <Col>
                                    <Form.Group as={Row}>
                                        <Form.Label column sm="2">
                                        Medicine Name
                                        </Form.Label>
                                        <Col sm="10">
                                        
                                        <Form.Control size="sm" placeholder="Medicine Name" id="drug_name" type="text" onCha />
                                        </Col>
                                    </Form.Group>

                                    <Form.Group as={Row}>
                                        <Form.Label column sm="2">
                                        Dosage
                                        </Form.Label>
                                        <Col sm="10">
                                        <Form.Control size="sm" type="number" placeholder="Dosage" id="dosage"  />
                                        </Col>
                                    </Form.Group>

                                    <Form.Group as={Row}>
                                        <Form.Label column sm="2">
                                        Route Taken
                                        </Form.Label>
                                        <Col sm="10">
                                        <Form.Control size="sm" placeholder="" id="route" type="text"  />
                                        </Col>
                                    </Form.Group>

                                    <Form.Group as={Row}>
                                        <Form.Label column sm="2">
                                        Frequency
                                        </Form.Label>
                                        <Col sm="10">
                                        <Form.Control size="sm" placeholder="" id="frequency" type="text"  />
                                        </Col>
                                    </Form.Group>
                                </Col>

                                <Col>
                                    <Form.Group as={Row}>
                                        <Form.Label column sm="2">
                                        Amount Dispensed
                                        </Form.Label>
                                        <Col sm="10">
                                        <Form.Control size="sm" type="number" id="amount_dispensed" placeholder="Medicine Name"  />
                                        </Col>
                                    </Form.Group>

                                    <Form.Group as={Row}>
                                        <Form.Label column sm="2">
                                        Number of Refills
                                        </Form.Label>
                                        <Col sm="10">
                                        <Form.Control size="sm" type="number" id="no_of_refills" placeholder="Dosage"  />
                                        </Col>
                                    </Form.Group>

                                    

                                    <Button variant="primary" size="sm" md={{ span: 4, offset: 4 }} id="submit" type="submit" >
                                        Submit
                                    </Button>

                                </Col>
                            </Row>
                        </Form>
                    </Card.Body>
                </Card>
            </div>
        )
    }
};

export default FormPage;
从“React”导入React;
从“react bootstrap”导入{行、卡、列、表、窗体、按钮};
类FormPage扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
处方医生:[],
活动项目:{
id:null,
药物名称:“”,
剂量:'',
路由:“”,
频率:'',
分配的金额:'',
没有\u次重新填充:“”
},
编辑:错,
}
this.viewPrescription=this.viewPrescription.bind(this)
this.handleChange=this.handleChange.bind(this)
this.handleSubmit=this.handleSubmit.bind(this)
this.getCookie=this.getCookie.bind(this)
//this.deleteItem=this.deleteItem.bind(this)
//this.startEdit=this.startEdit.bind(this)
//this.strikeUnstrike=this.strikeUnstrike.bind(this)
};
getCookie(名称){
让cookieValue=null;
if(document.cookie&&document.cookie!=''){
常量cookies=document.cookie.split(“;”);
for(设i=0;iresponse.json())
。然后(数据=>
//console.log(“处方”,数据)
这是我的国家({
处方医生:数据
})
)
}
手变(e){
var name=e.target.name
var值=e.target.value
console.log('Name:',Name)
console.log('Value:',Value)
这是我的国家({
活动项目:{
…this.state.activeItem,
标题:价值
}
})
}
//S U B M I T T I T A T A T A P I
handleSubmit(e){
e、 预防默认值()
//console.log('Prescription:',this.state.achieveItem)
var csrftoken=this.getCookie('csrftoken')
//var url='1〕http://127.0.0.1:8000/api/prescription-视图/'
取('http://127.0.0.1:8000/api/prescription-视图/'{
方法:“POST”,
标题:{
“内容类型”:“应用程序/json”,
“X-CSRFToken”:CSRFToken,
},
正文:JSON.stringify(this.state.activeItem)
})。然后((响应)=>{
this.viewPrescription()
这是我的国家({
活动项目:{
id:null,
药物名称:“”,
剂量:'',
路由:“”,
频率:'',
分配的金额:'',
没有\u次重新填充:“”,
}
})
}).catch(函数(错误){
console.log('ERROR',ERROR)
})
}
render(){
var prescriptionView=this.state.prescriptionList
//var self=这个
返回(
患者信息
唐纳德·拜登
年龄
:
55岁
地址
:
圣帕布洛,拉古纳
生日
:
1965年9月9日
{prescriptionView.map(函数(prescriptionView,索引){
返回(
药物信息
药名
:
{处方视图.药物名称}