how to clean request.POST? Django

0

I am doing a card payment process. When making the confirmation of the transaction I want to be able to delete the POST data so that I can not make a new transaction when reloading the page.

My code is this:

def comprar(request,producto,stock):
if request.POST:
    producto = get_object_or_404(Producto, slug = producto)
    foto = Foto.objects.filter(producto = producto)
    perfil = Perfil.objects.get(usuario = request.user)
    comision = Comision.objects.get(id = 1)
    stock = Stock.objects.get(producto = producto, id = stock)
    promocion = Promocion.objects.get(id = 1)
    form = PayerForm(request.POST)
    if form.is_valid():
        if promocion.activo:
            promo = promocion
            gastos_envio = promocion.precio_oferta
            total = producto.p_venta + gastos_envio
        else:
            gastos_envio = comision.gastos_envio
            total = producto.p_venta + gastos_envio
        tarjeta_data = form.clean()
        if tarjeta_data['guardar']:
            guardar_tarjeta(tarjeta_data, perfil)
        comision = Comision.objects.get()
        if producto.perfil.boutique:
            p_comision = comision.comision_boutique
        else:
            p_comision = comision.comision
        cal_comision = round(((p_comision * producto.p_venta) / 100),2)
        cal_iva = round(((comision.impuesto * cal_comision) / 100),2)
        pedido = Pedido(p_prod = producto.p_venta,
                        p_envio = gastos_envio,
                        cp_nom_producto = producto.nombre,
                        cp_estado = producto.estado_prod,
                        cp_talla = stock.talla.valor,
                        cp_marca = producto.marca.nombre,
                        cp_nombre_completo = producto.perfil.usuario.first_name + producto.perfil.usuario.last_name,
                        cp_direccion = perfil.entrg_direccion,
                        cp_ciudad = perfil.entrg_ciudad.name,
                        cp_dep = perfil.entrg_dep.name,
                        cp_pais = perfil.entrg_pais.name,
                        cp_telefono = perfil.tel,
                        perfil = perfil,
                        producto = producto,
                        cp_email = perfil.usuario.email,
                        cp_comision = cal_comision,
                        cp_impuesto = cal_iva,
                        cp_total = total,
                        nit_o_cedula = producto.perfil.cedula_o_nit)
        pedido.estado_pago = 3
        pedido.save()
        resultado = realizar_compra(pedido,perfil,tarjeta_data,request)
        return confirmacion_pago(request,perfil,pedido,resultado)
    return redirect('proceso-compra',slug=producto.slug)

and this is the function to which I send it in case the process has been successfully completed:

def confirmacion_pago(request,perfil,pedido,resultado):
perfil = Perfil.objects.get(usuario = request.user)
producto = pedido.producto
foto = Foto.objects.filter(producto = producto)
comision = Comision.objects.get(id = 1)
if pedido.estado_pago == 3:
    if resultado['code'] == 'SUCCESS':
        pedido.id_transaccion = resultado['transactionId']
        pedido.estado_pago = 2
        tallas = Stock.objects.filter(producto = producto)
        stock = tallas.get(talla__valor = pedido.cp_talla)
        stock.cantidad = stock.cantidad - 1
        stock.save()
        is_vendido = True
        for t in tallas:
            if t.cantidad != 0:
                is_vendido = False
        if is_vendido == True:
            producto.estado_rev = 5
            producto.save()
        if perfil.boutique == False:
            transferencia = comision.gastos_transferencia
        else:
            transferencia = comision.gastos_transferencia_boutique
        if producto.perfil.boutique == False:
            transferencia = comision.gastos_transferencia
        else:
            transferencia = comision.gastos_transferencia_boutique
        cal_comision = round(((p_comision * producto.p_venta) / 100),2)
        cal_iva = round(((comision.impuesto * cal_comision) / 100),2)
        total = round(producto.p_venta - cal_comision - cal_iva,2)
        Transaccion.objects.create(pedido=pedido, 
                                    perfil=pedido.producto.perfil,
                                    concepto=1,
                                    cantidad=total + transferencia - pedido.p_envio,
                                    comision=cal_comision,
                                    iva=cal_iva,
                                    gastos_gestion=0,
                                    gasto_transferencia=transferencia)
        html = render_to_string('intranet/emails/compra.html',{'pedido':pedido,'foto':foto[0].path,'domain': 'www.chikka.com.co'})
        msg = EmailMessage('Te han hecho una compra', html, settings.EMAIL_HOST_USER, to=[producto.perfil.usuario.email])
        msg.content_subtype = 'html'
        msg.send(fail_silently=False)
        conexion = SoapConexion()
        nombre_contacto = pedido.perfil.usuario.first_name + ' ' + pedido.perfil.usuario.last_name
        nombre_remitente = pedido.producto.perfil.usuario.first_name + ' ' + pedido.producto.perfil.usuario.last_name
        pedido.save()
        request.POST = {}
    return render(request, 'intranet/confirmacion_comprar.html',{'resultado':resultado,'perfil':perfil,'producto':producto,'foto':foto[0],
            'gastos_envio':comision.gastos_envio,'total':pedido.cp_total,'form':PayerForm(),'pedido':pedido})

    
asked by F Delgado 12.04.2018 в 11:59
source

1 answer

0

Under my point of view you should assign a new form before doing the return render something like this:

formPayer = PayerForm() #nueva instancia del form 
return render(request, 'intranet/confirmacion_comprar.html',{'resultado':resultado,'perfil':perfil,'producto':producto,'foto':foto[0],
            'gastos_envio':comision.gastos_envio,'total':pedido.cp_total,'form':formPayer,'pedido':pedido})
    
answered by 17.04.2018 / 23:57
source