You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django2实现新用户注册自动发放指定加密货币功能求助

Solution: Auto-Issue Cryptocurrency on User Signup

Hey there! Let's get this working for your school project. Here's how to modify your existing code to automatically create a transaction between your "bank" user and new signups:

Step 1: Understand the Transaction Flow

When a new user registers, we need to:

  • Identify a system "bank" user that will send the cryptocurrency
  • Fetch the specific currency you want to issue
  • Create a Transaction record where the bank is debited and the new user is credited

Step 2: Modify Your Signup View

Update your signup function in views.py with the following logic. I'll break down each part so you know what's happening:

First, make sure to import your models at the top of views.py:

from django.contrib.auth.models import User
from .models import Transaction, Currency

Then update the signup view:

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            # Save the new user and get the user object
            user = form.save()
            
            # --- Auto-issue cryptocurrency logic starts here ---
            # 1. Get or create a system "bank" user (create once if it doesn't exist)
            bank_user, created = User.objects.get_or_create(username='system_bank')
            # Optional: Set a password for the bank if you need to access it later
            if created:
                bank_user.set_password('secure_bank_password_123')
                bank_user.save()
            
            # 2. Fetch the specific currency you want to issue (adjust the query to match your Currency data)
            # Example: Get currency by name, use id or slug if that's how you track it
            target_currency = Currency.objects.get(name='YourTokenName')
            
            # 3. Define the amount of currency to give new users
            signup_bonus_amount = 100  # Change this to your desired amount
            
            # 4. Create the transaction record
            Transaction.objects.create(
                user_debit=bank_user,          # Bank is sending (debited)
                user_credit=user,              # New user is receiving (credited)
                currency_id=target_currency,
                exchange_amount=signup_bonus_amount,
                # listing_id stays null since this isn't tied to a listing
            )
            # --- Auto-issue logic ends here ---
            
            # Log the user in as before
            raw_password = form.cleaned_data.get('password1')
            authenticated_user = authenticate(username=user.username, password=raw_password)
            login(request, authenticated_user)
            return redirect('/')
    else:
        form = SignUpForm()
    return render(request, 'sign-up.html', {'SignUpForm': form})

Key Notes & Considerations

  • Bank User: The get_or_create method ensures we only create one bank user, even if multiple users sign up. You can customize the username and password to fit your project.
  • Currency Query: Adjust Currency.objects.get(name='YourTokenName') to match how you store your target currency (e.g., use id=1 if you know the specific currency ID). Add a try-except block here if you want to handle cases where the currency doesn't exist:
    try:
        target_currency = Currency.objects.get(name='YourTokenName')
    except Currency.DoesNotExist:
        # Handle missing currency (e.g., log error, create default currency)
        pass
    
  • Balance Tracking: If your project uses a separate Balance model to track user holdings, you'll need to update that too (e.g., increment the new user's balance for the target currency). But based on your Transaction model, it looks like you're using transaction history to calculate balances, so creating the Transaction record should be enough.
  • Testing: After implementing, register a new user and check your database's Transaction table to verify the record was created correctly (bank as user_debit, new user as user_credit, correct amount and currency).

内容的提问来源于stack exchange,提问作者user9758616

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:00:03