Python 成功支付django时更新db
我有一个名为“展览”的模型,在该模型中,我允许用户在填写表格后创建一个新的展览/活动,他们被要求支付一定金额,并被重定向到支付网关(paypal根据),在成功支付后,我只想为已支付的用户更新我的“展览”表,用户被要求在创建事件之前登录,我还将用户与表单一起保存在我的数据库中 这是我保存表单的视图:Python 成功支付django时更新db,python,django,paypal,Python,Django,Paypal,我有一个名为“展览”的模型,在该模型中,我允许用户在填写表格后创建一个新的展览/活动,他们被要求支付一定金额,并被重定向到支付网关(paypal根据),在成功支付后,我只想为已支付的用户更新我的“展览”表,用户被要求在创建事件之前登录,我还将用户与表单一起保存在我的数据库中 这是我保存表单的视图: def new_event(request): form = NewEventForm(request.POST or None) if form.is_valid():
def new_event(request):
form = NewEventForm(request.POST or None)
if form.is_valid():
save_it = form.save(commit=False)
save_it.user = request.user
save_it.save()
return render_to_response('new_event.html',locals(), context_instance=RequestContext(request))
我的模型是:
class Exhibition(models.Model):
user = models.ForeignKey(User, blank=True, null = True)
Type = models.ForeignKey('home.Type')
Category = models.ForeignKey('home.Category')
Country = models.ForeignKey('home.Country')
City = models.ForeignKey('home.City')
Event_name = models.CharField(max_length = 250)
Video_url = models.URLField(blank = True)
Event_start_date = models.DateField(blank = False)
Event_end_date = models.DateField(blank = False)
Discription = RichTextField(blank = False)
Contact_person = models.CharField(max_length=50,blank = True )
Company = models.CharField(max_length = 100,blank = True)
Company_website = models.URLField(blank = True)
Email = models.EmailField(blank = True)
Event_website = models.URLField(blank = True)
Event_email = models.EmailField(blank = True)
Venue = models.CharField(max_length = 250, blank = False)
Address = models.CharField(max_length = 250, blank = False)
Paid = models.IntegerField(max_length=2, default='0')
def __unicode__(self):
return '%s' % self.Event_name
@permalink
def get_absolute_url(self):
return ('view_category', None, { 'slug': self.Event_name })
如果我使用django paypal view,我将能够处理付款,但我不知道如何获得正确的“展览id”来更新数据库,我是否应该将其存储在Cookie中以及如何执行此操作?我建议添加一个包含用户id的自定义字段,并在paypal通知您后恢复此字段 请参见下面的自定义设置:
我会尝试向django paypal的模型PayPals标准库添加一个post_save信号处理程序,然后使用交易记录的字段来识别您的展览记录。您可以使用模型的主键字段并告诉paypal这是您的交易项目编号,或者只添加任何其他要用作公共标识符的唯一字段 在这里查看模型: 信号处理程序如下所示:
@receiver(post_save, sender=PayPalStandardBase)
def mark_as_paid(sender, instance=None, created=False, **kwargs):
if created:
e = Exhibition.objects.get(pk=instance.item_number)
e.Paid = ...
e.save()
您可以将其添加到您的models.py或signals.py中,然后将其导入其他地方。我有点困惑,成功付款后,用户将被重定向到另一个页面,那么我如何在那里获取项目编号?我必须将其存储在cookies中吗?不,信号处理程序不是视图。保存事务时会自动触发post_保存处理程序。不管你的观点如何,我还是不知道怎么做。你能告诉我在这种情况下如何完全做到这一点吗?我知道IPN变量,但我不知道如何在django中使用它们,你能给我一个同样的例子吗,这将是很大的帮助。谢谢在回调url中,从请求恢复值:request.POST['customvariablename']