django 如何在Python中使用银行应用程序[关闭]

bqucvtff  于 2023-10-21  发布在  Go
关注(0)|答案(3)|浏览(116)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

6天前关闭
Improve this question
我知道Python和Django,但不是高级的。我想申请银行业务供个人使用。它将有各种类型的帐户,如储蓄帐户,定期存款帐户。我需要计算利息并自动将钱存入账户。
有没有这种类型的应用程序的例子,以便我可以开始。

iqxoj9l9

iqxoj9l91#

从djangoproject.com上的教程开始,然后从那里开始。
如果你想看看已经做过的事情,去:http://code.google.com/p/django-budget/这应该给你一个很好的开始给予。

2ic8powd

2ic8powd2#

要在Python和Django中创建一个银行应用程序,您需要创建一个Django模型。在银行系统的背景下,有两个必要的模型:账户模型和交易模型。

class Account(models.Model):

    ACCOUNT_TYPE = (
        ('Savings', 'savings'),
        ('Current', 'current')
    )
    ACCOUNT_STATUS = (
        ('Active', 'active'),
        ('Closed', 'closed'),
        ('Frozen', 'frozen')
    )

    FIXED_DEPOSIT = (
        ('Regular', 'regular'),
        ('Senior Citizen', 'senior citizen'),
        ('Corporate', 'corporate')

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    account_number = models.IntegerField(editable=False)
    account_balance = models.DecimalField(max_digits=6, decimal_places=3)
    account_type = models.CharField(max_length=50, choices=ACCOUNT_TYPE)
    account_status = models.CharField(max_length=50, choices=ACCOUNT_STATUS)
    transfer_pin = models.IntegerField()
    fixed_deposit = models.CharField(max_length=50, choices=FIXED_DEPOSIT)

这些是Account模型的必需字段。您可以添加其他字段并设计自己的银行系统,但这些字段是必需的。
创建Account模型后,在创建用户时应自动创建帐号和一些字段。在这种情况下,我们需要使用Django信号来创建一个Account模型对象,无论何时创建用户。我们应该使用Django信号的原因是创建Account模型对象的简单性。想象一下这是一个社交媒体应用程序;每个用户都有一个简档。你认为允许用户手动创建个人资料页面真的是一个好主意吗?如果是,则用户可以创建多个配置文件页面。这就是为什么我们想使用Django信号来自动为您创建一个帐户模型。

from .models import Account
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
import random
import string

#we should generate an account number for each user, we can't just create it manually.
def generate_account_number():
    start_number = '55' + ''.join(random.choices(string.digits, k=8
    return start_number

User = settings.AUTH_USER_MODEL
   
@receiver(post_save, sender=User)
def create_account(created, instance, sender, **kwargs):
    if created:
        transfer_pin = instance.transfer_pin
        account_status = 'Active'
        account_type = 'Savings' #you can edit that, but for this time, it should be a savings account.
        fixed_deposit = 'Regular' # you can also edit it, but for this time, it should be created with Regular.
        account_number = generate_account_number()
        #create an Account model automatically
        Account.objects.create(
            user=instance, 
            account_number=account_number, 
            account_type=account_type,
            account_status=account_status,
           fixed_deposit=fixed_deposit, transfer_pin=transfer_pin, account_balance=0
        )

要创建事务模型,您需要创建必要的字段,如:金额、发送者、接收者、帐号和时间戳,在这个例子中,我创建了一个发送者和一个接收者字段,并将它们分配给一个具有不同相关名称的CustomUser模型。在django模型中,当你在Transaction模型中定义sender和receiver时,你很可能是在建模一个金融或交易系统。这就是为什么你可能需要这两个字段:
1.发件人字段表示发起或发送事务的实体。这可能是个人,企业或任何正在转移资金或资源的帐户。在金融背景下,它可能是从中扣除或提取资金的帐户。
1.另一方面,receiver字段表示事务接收端的实体。这是通过交易获得资金或资源的帐户或实体。在金融术语中,它是接收资金的账户。
在您的交易模型中拥有发送方和接收方字段,可以提供一种清晰而结构化的方式来处理财务交易,并确保您可以跟踪和验证应用程序中的资产移动,它允许您回答以下问题:
1.谁发起交易?
1.谁收到了资金?

class Transaction(models.Model):
    amount = models.DecimalField(max_digits=6, decimal_places=3, editable=False),
    account_number = models.IntegerField()
    sender = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='who_send')
    receiver= models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='who_receive')
    timestamp = models.DateTimeField(auto_now_add=True)

现在是时候创建一个交易视图,并发送利率到一个超级用户帐户。

def transfer(request):
    if request.method == 'POST':
        account_number = request.POST['account_number']
        amount = Decimal(request.POST['amount'])
        superuser_account = Account.objects.get(user='superuser username') # set this username to the admin username or your preferred account.
        sender_account = Account.objects.get(user=request.user)
        receiver_account = Account.objects.get(account_number=account_number)

        interest_rate = 0.02
        deduction = amount * interest_rate

        if sender_account.account_balance >= amount:
            sender_account.account_balance -= amount
            sender_account.save()

            receiver_account.account_balance += amount
            receiver_account.save()
  
            superuser_account.account_balance += deduction
            superuser_account.save()
            
            Transaction.objects.create(
                sender=request.user, receiver=receiver_account.user,
                amount=amount, account_number=account_number
            )
            return redirect ('Transfer')
        else:
            messages.error(request, 'Insufficient Funds')
            return redirect ('Transfer')
    return render(request, 'transfer.html')

此代码检查发件人帐户余额是否大于等于指定的转账金额。如果发送者没有足够的资金,它会设置一条错误消息并重定向到转账页面。该代码还检查是否有足够的资金,该代码将从发送者帐户余额发送指定的金额,并将相同的金额添加到接收者帐户余额。然后将这些更改保存到数据库。在此代码中,有2%(0.02)的interest_rate,并根据交易金额计算扣除额。然后,我从发送者帐户中扣除交易金额沿着利息。

bgibtngc

bgibtngc3#

您必须授权该应用程序才能访问您的银行帐户。看看他们使用的授权框架,比如OAuth。你可以使用一些库来集成那些标准框架,比如Authlib。

相关问题