Skip to content

Commit 00943cc

Browse files
committed
payments app bootstrap with two models and admin
./manage.py startapp payments ./manage.py makemigrations payments ./manage.py migrate
1 parent f9800f1 commit 00943cc

File tree

10 files changed

+99
-0
lines changed

10 files changed

+99
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
/PY/
2+
/db.sqlite3
23
*.py[co]

payments/__init__.py

Whitespace-only changes.

payments/admin.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.contrib import admin
2+
3+
from .models import Order, Payment
4+
5+
admin.site.register(Order)
6+
admin.site.register(Payment)
7+

payments/apps.py

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class PaymentsConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'payments'

payments/migrations/0001_initial.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Generated by Django 5.0.4 on 2024-04-08 07:50
2+
3+
import django.db.models.deletion
4+
import payments.models
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
initial = True
11+
12+
dependencies = [
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='Order',
18+
fields=[
19+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20+
('description', models.CharField(max_length=200)),
21+
('buyer', models.EmailField(max_length=254)),
22+
('price', models.IntegerField()),
23+
('purchased', models.DateTimeField(verbose_name='date of purchase')),
24+
],
25+
),
26+
migrations.CreateModel(
27+
name='Payment',
28+
fields=[
29+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
30+
('address', models.CharField(max_length=128)),
31+
('amount', models.IntegerField()),
32+
('expire', models.DateTimeField(default=payments.models.get_default_expire, verbose_name='payment is not accepted after')),
33+
('is_paid', models.BooleanField(default=False)),
34+
('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='payments', to='payments.order')),
35+
],
36+
),
37+
]

payments/migrations/__init__.py

Whitespace-only changes.

payments/models.py

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import datetime
2+
3+
from django.conf import settings
4+
from django.db import models
5+
from django.utils import timezone
6+
7+
8+
class Order(models.Model):
9+
description = models.CharField(max_length=200)
10+
buyer = models.EmailField()
11+
price = models.IntegerField()
12+
purchased = models.DateTimeField("date of purchase")
13+
14+
def pending_payments(self):
15+
now = timezone.now()
16+
return self.payments.filter(expire__gte=now)
17+
18+
def is_paid(self):
19+
return self.payments.filter(is_paid=True).exists()
20+
21+
def __str__(self):
22+
return '{} for ${}'.format(self.description, self.price)
23+
24+
25+
def get_default_expire():
26+
return timezone.now() + datetime.timedelta(hours=1)
27+
28+
class Payment(models.Model):
29+
order = models.ForeignKey(Order, related_name='payments', on_delete=models.CASCADE)
30+
address = models.CharField(max_length=128)
31+
amount = models.IntegerField()
32+
expire = models.DateTimeField("payment is not accepted after", default=get_default_expire)
33+
is_paid = models.BooleanField(default=False)
34+
35+
def confirm(self):
36+
self.is_paid = True
37+
self.save()
38+
39+
def __str__(self):
40+
return '{} in {} wei'.format(self.order, self.amount)
41+

payments/tests.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

payments/views.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.shortcuts import render
2+
3+
# Create your views here.

web3django/settings.py

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
# Application definition
3232

3333
INSTALLED_APPS = [
34+
"payments.apps.PaymentsConfig",
3435
'django.contrib.admin',
3536
'django.contrib.auth',
3637
'django.contrib.contenttypes',

0 commit comments

Comments
 (0)