【问题标题】:How can I do a redirect from the backend Django如何从后端 Django 进行重定向
【发布时间】:2021-07-17 06:25:39
【问题描述】:

我有一个应用程序,前端使用 React Js,后端使用 Django。在向服务器发送一些信息后,我想在前端进行重定向,这可能吗?如果有怎么办? 我尝试了重定向,但没有成功

前端(reactJs)

async function PaymentHandler(e) {
    e.preventDefault();
 
    const data = { command_id: order._id, price: order.TotalPrice };

    try {
     
      const res = await axios.post("/api/orders/Details/", data);
    } catch (error) {
      console.log("THERES AN ERROR : ", error);
    }
  }
  return loading ? (
    <Loader />
  ) : error ? (
    <Message variant="danger">{error}</Message>
  ) : (
    <div>
      
        <Button
        variant="outline-primary"
        className="mt-3"
        onClick={PaymentHandler}
        >
            PAY NOW
        </Button>
    </div>
    )

模型.py

class Stuff(models.Model):
    paymentDetails = models.JSONField()

模型序列化器

class PaymentSerializer(serializers.ModelSerializer):
paymentDetails = serializers.JSONField()
class Meta:
    model = Stuff
    fields = '__all__'

views.py

from rest_framework.decorators import api_view
from django.shortcuts import redirect
from base.models import Stuff
from base.serializers import PaymentSerializer
import requests
import json


@api_view(['POST'])
def getPaymentDetails(request):
    data = request.data
    payment = Stuff.objects.create(
        paymentDetails = data
    )
    serializer = PaymentSerializer(payment, many=False)
    last = Stuff.objects.last()
   
    details = (last.paymentDetails)
    print('cmd id value :', details['command_id'])
    print('price id value :', details['price'])

    headers = {"Content-Type": "application/json","Authorization": "Bearer eyJ0exxxxxxxxxxxx"}
    url = "https://apps.somewebsite.com/"
    payload = {"payment_data":{
        "command_id":details['command_id'],
        "price":details['price']},
        "data":{"return_url":"some return url",
        "cancel_url":"some cancel url",
        "shop_code":1}}
    r = requests.post(url, headers=headers, json=payload)
    print('request result : ', r.text)
    result = r.text
    result=json.loads(result)
 
    if result['status'] == 1:
        print ('payment token = ', result['payment_token'])
        
        return redirect('https://welcome.somewebsite.com/payment/'+result['payment_token'])

【问题讨论】:

  • Ummm 是的,Django 可以做到这一点,但是您需要将 url 添加到您的 urls.py 文件中并为其命名。然后你可以通过 url 文件重定向它。

标签: reactjs django django-rest-framework


【解决方案1】:

假设您想从 getPaymentDetails() 重定向到您的索引页

你需要在urls.py注册一个url

urlpatterns = [
    path('', IndexView, name='index'),
]

然后,您可以像这样从您的函数重定向。

def getPaymentDetails(request):
...
    return redirect('index')

【讨论】:

    【解决方案2】:

    你可以这样做

    import { useHistory } from "react-router-dom";
    let history = useHistory();    
    const res = await axios.post("/api/orders/Details/", data)
        .then(res=>{
               // if status is OK, 200 or 201 redirect with react
               history.push("/your_success_path");
            })
        .catch(err => {
            //update error state 
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多