gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-codeless] 01/02: basic login


From: gnunet
Subject: [GNUnet-SVN] [taler-codeless] 01/02: basic login
Date: Wed, 30 May 2018 00:18:30 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository codeless.

commit 03c15c038ea802395734b55a965371d06e0117e3
Author: shivam kohli <address@hidden>
AuthorDate: Sat May 19 16:25:16 2018 +0530

    basic login
---
 .DS_Store                            | Bin 0 -> 6148 bytes
 .gitignore                           |   5 ++
 codeless/__init__.py                 |   0
 codeless/settings.py                 | 110 +++++++++++++++++++++++++++++++++++
 codeless/urls.py                     |  14 +++++
 codeless/wsgi.py                     |  16 +++++
 inventory/__init__.py                |   0
 inventory/admin.py                   |  13 +++++
 inventory/forms.py                   |  39 +++++++++++++
 inventory/migrations/0001_initial.py |  77 ++++++++++++++++++++++++
 inventory/migrations/__init__.py     |   0
 inventory/models.py                  |  99 +++++++++++++++++++++++++++++++
 inventory/tests.py                   |   3 +
 inventory/views.py                   |  72 +++++++++++++++++++++++
 manage.py                            |  10 ++++
 templates/inventory/home.html        |  11 ++++
 templates/inventory/index.html       |  32 ++++++++++
 templates/inventory/login.html       |  49 ++++++++++++++++
 templates/inventory/signup.html      |  45 ++++++++++++++
 19 files changed, 595 insertions(+)

diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..3c10d02
Binary files /dev/null and b/.DS_Store differ
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..31c2b3e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+db.sqlite3
+codeless/__pycache__/*
+inventory/migrations/__pycache__/*
+*.pyc
+*.DS_Store
diff --git a/codeless/__init__.py b/codeless/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/codeless/settings.py b/codeless/settings.py
new file mode 100644
index 0000000..9be921d
--- /dev/null
+++ b/codeless/settings.py
@@ -0,0 +1,110 @@
+"""
+Django settings for codeless project.
+
+Generated by 'django-admin startproject' using Django 1.8.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.8/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.8/ref/settings/
+"""
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+import os
+
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = '58c29ykcsc)address@hidden)ce%rk15_c=&uu!k#f!b(l4pbmlryp5s=p'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = (
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'inventory',
+)
+
+MIDDLEWARE_CLASSES = (
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+    'django.middleware.security.SecurityMiddleware',
+)
+
+ROOT_URLCONF = 'codeless.urls'
+
+# TEMPLATES = [
+#     {
+#         'BACKEND': 'django.template.backends.django.DjangoTemplates',
+#         'DIRS': [],
+#         'APP_DIRS': True,
+#         'OPTIONS': {
+#             'context_processors': [
+#                 'django.template.context_processors.debug',
+#                 'django.template.context_processors.request',
+#                 'django.contrib.auth.context_processors.auth',
+#                 'django.contrib.messages.context_processors.messages',
+#             ],
+#         },
+#     },
+# ]
+
+WSGI_APPLICATION = 'codeless.wsgi.application'
+
+
+TEMPLATE_PATH = os.path.join(BASE_DIR, 'templates')
+
+TEMPLATE_DIRS = (
+    TEMPLATE_PATH,
+)
+
+
+# Database
+# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3',
+        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+    }
+}
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.8/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/1.8/howto/static-files/
+
+STATIC_URL = '/static/'
diff --git a/codeless/urls.py b/codeless/urls.py
new file mode 100644
index 0000000..2badc2e
--- /dev/null
+++ b/codeless/urls.py
@@ -0,0 +1,14 @@
+from django.conf.urls import include, url
+from django.contrib import admin
+
+urlpatterns = [
+    # Examples:
+    # url(r'^$', 'codeless.views.home', name='home'),
+    # url(r'^blog/', include('blog.urls')),
+    
+    url(r'^admin/', include(admin.site.urls)),
+    url(r'^signup/$', 'inventory.views.signup', name='signup'),
+    url(r'^home/$', 'inventory.views.home', name='home'),
+    url(r'^login/$', 'inventory.views.login', name='login'),
+    url(r'^logout/$', 'inventory.views.logout', name='logout'),
+]
diff --git a/codeless/wsgi.py b/codeless/wsgi.py
new file mode 100644
index 0000000..12717af
--- /dev/null
+++ b/codeless/wsgi.py
@@ -0,0 +1,16 @@
+"""
+WSGI config for codeless project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "codeless.settings")
+
+application = get_wsgi_application()
diff --git a/inventory/__init__.py b/inventory/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/inventory/admin.py b/inventory/admin.py
new file mode 100644
index 0000000..76bf7e8
--- /dev/null
+++ b/inventory/admin.py
@@ -0,0 +1,13 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from django.contrib import admin
+from inventory.models import Product, Merchant, Order, Purchase, PaymentButton
+
+# Register your models here.
+
+admin.site.register(Product)
+admin.site.register(Merchant)
+admin.site.register(Order)
+admin.site.register(Purchase)
+admin.site.register(PaymentButton)
diff --git a/inventory/forms.py b/inventory/forms.py
new file mode 100644
index 0000000..2d32f5a
--- /dev/null
+++ b/inventory/forms.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from django import forms
+from django.contrib.auth.forms import UserCreationForm
+from django.contrib.auth.models import User
+from inventory.models import Merchant
+
+
+class SignUpForm(UserCreationForm):
+    first_name = forms.CharField(max_length=30, required=False)
+    last_name = forms.CharField(max_length=30, required=False)
+    email = forms.EmailField(max_length=254)
+
+    class Meta:
+        model = User
+        fields = (
+            'username',
+            'first_name',
+            'last_name',
+            'email',
+            'password1',
+            'password2',
+            )
+
+
+class MerchantDetailForm(forms.ModelForm):
+    class Meta:
+        model = Merchant
+        fields = ("address",)
+
+
+class LoginForm(forms.ModelForm):
+    class Meta:
+        model = User
+        fields = (
+            "username", 
+            "password"
+            )
diff --git a/inventory/migrations/0001_initial.py 
b/inventory/migrations/0001_initial.py
new file mode 100644
index 0000000..cca4181
--- /dev/null
+++ b/inventory/migrations/0001_initial.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Merchant',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', primary_key=True, 
serialize=False, auto_created=True)),
+                ('address', models.TextField()),
+                ('pay_url', models.URLField(max_length=250, default='NULL')),
+                ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Order',
+            fields=[
+                ('order_id', models.AutoField(primary_key=True, 
serialize=False)),
+                ('description', models.CharField(max_length=300, blank=True, 
null=True)),
+                ('order_date', models.DateTimeField(auto_now=True)),
+                ('address', models.CharField(max_length=250, blank=True, 
null=True)),
+                ('fulfillment_url', models.URLField(default='NULL')),
+                ('merchant_id', models.ForeignKey(to='inventory.Merchant')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='PaymentButton',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', primary_key=True, 
serialize=False, auto_created=True)),
+                ('text', models.CharField(max_length=100, blank=True, 
null=True)),
+                ('font_size', models.CharField(max_length=50, blank=True, 
null=True)),
+                ('color', models.CharField(max_length=50, blank=True, 
null=True)),
+                ('background_color', models.CharField(max_length=50, 
blank=True, null=True)),
+                ('border_radius', models.CharField(max_length=50, blank=True, 
null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Product',
+            fields=[
+                ('product_id', models.AutoField(primary_key=True, 
serialize=False)),
+                ('name', models.CharField(max_length=50, blank=True, 
null=True)),
+                ('description', models.CharField(max_length=300, blank=True, 
null=True)),
+                ('price', models.IntegerField(blank=True, null=True)),
+                ('delivery_date', models.DateTimeField(auto_now=True)),
+                ('starting_inventory', models.IntegerField(blank=True, 
null=True)),
+                ('minimuma_required', models.IntegerField(blank=True, 
null=True)),
+                ('inventory_on_hand', models.IntegerField(blank=True, 
null=True)),
+                ('inventory_recieved', models.IntegerField(blank=True, 
null=True)),
+                ('inventory_shipped', models.IntegerField(blank=True, 
null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Purchase',
+            fields=[
+                ('purchase_id', models.AutoField(primary_key=True, 
serialize=False)),
+                ('description', models.CharField(max_length=300, blank=True, 
null=True)),
+                ('purchase_date', models.DateTimeField(auto_now=True)),
+                ('product_recieved', models.IntegerField(blank=True, 
null=True)),
+                ('supplier', models.CharField(max_length=50, blank=True, 
null=True)),
+                ('product_id', models.ManyToManyField(null=True, 
to='inventory.Product')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='order',
+            name='product_id',
+            field=models.ManyToManyField(null=True, to='inventory.Product'),
+        ),
+    ]
diff --git a/inventory/migrations/__init__.py b/inventory/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/inventory/models.py b/inventory/models.py
new file mode 100644
index 0000000..4de9f1c
--- /dev/null
+++ b/inventory/models.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from django.db import models
+from django.contrib.auth.models import User
+from django.db.models.signals import post_save
+from django.dispatch import receiver
+
+
+class Product(models.Model):
+    """ The details of the product is described in this table.
+    This table tracks the inventory of the product.
+    """
+    product_id = models.AutoField(primary_key=True)
+    name = models.CharField(max_length=50, blank=True, null=True)
+    description = models.CharField(max_length=300, blank=True, null=True)
+    price = models.IntegerField(blank=True, null=True)
+    delivery_date = models.DateTimeField(auto_now=True)
+    starting_inventory = models.IntegerField(blank=True, null=True)
+    minimuma_required = models.IntegerField(blank=True, null=True)
+    # inventory_on_hand is updated by purchase and outgoing orders.
+    inventory_on_hand = models.IntegerField(blank=True, null=True)
+    inventory_recieved = models.IntegerField(blank=True, null=True)
+    inventory_shipped = models.IntegerField(blank=True, null=True)
+
+    def __str__(self):
+        return self.name
+
+
+class Merchant(models.Model):
+    """ Extending the default Django User Model.
+    This will hold a One-To-One relationship with the existing User Model.
+    """
+    user = models.OneToOneField(User, on_delete=models.CASCADE)
+    address = models.TextField()
+    pay_url = models.URLField(max_length=250, default='NULL')
+
+    def __str__(self):
+        return self.user.username
+
+
address@hidden(post_save, sender=User)
+def create_user_profile(sender, instance, created, **kwargs):
+    """ Hooking the create_user_profile method to
+    the User model, whenever a save event occurs
+    """
+    if created:
+        Merchant.objects.create(user=instance)
+
+
address@hidden(post_save, sender=User)
+def save_user_profile(sender, instance, **kwargs):
+    """ Hooking the save_user_profile method to
+    the User model, whenever a save event occurs
+    """
+    instance.Merchant.save()
+
+
+class Order(models.Model):
+    """ Details of the order customer buys is updated in this table.
+    These details will be used to make request to the Merchant Backend API
+    """
+    order_id = models.AutoField(primary_key=True)
+    product_id = models.ManyToManyField(Product, null=True)
+    description = models.CharField(max_length=300, blank=True, null=True)
+    order_date = models.DateTimeField(auto_now=True)
+    address = models.CharField(max_length=250, blank=True, null=True)
+    merchant_id = models.ForeignKey(Merchant, on_delete=models.CASCADE)
+    fulfillment_url = models.URLField(max_length=200, default='NULL')
+
+    def __str__(self):
+        return self.description
+
+
+class Purchase(models.Model):
+    """ To keep a track of the purchases the merchant makes.
+    This table is essential to update the inverntory in hand.
+    """
+    purchase_id = models.AutoField(primary_key=True)
+    product_id = models.ManyToManyField(Product, null=True)
+    description = models.CharField(max_length=300, blank=True, null=True)
+    purchase_date = models.DateTimeField(auto_now=True)
+    product_recieved = models.IntegerField(blank=True, null=True)
+    supplier = models.CharField(max_length=50, blank=True, null=True)
+
+    def __str__(self):
+        return self.description
+
+
+class PaymentButton(models.Model):
+    """ Design pattern for the payment button are stored in this table. """
+    text = models.CharField(max_length=100, blank=True, null=True)
+    font_size = models.CharField(max_length=50, blank=True, null=True)
+    color = models.CharField(max_length=50, blank=True, null=True)
+    background_color = models.CharField(max_length=50, blank=True, null=True)
+    border_radius = models.CharField(max_length=50, blank=True, null=True)
+
+    def __str__(self):
+        return self.text
diff --git a/inventory/tests.py b/inventory/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/inventory/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/inventory/views.py b/inventory/views.py
new file mode 100644
index 0000000..80be28e
--- /dev/null
+++ b/inventory/views.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from inventory.forms import SignUpForm, MerchantDetailForm, LoginForm
+from inventory.models import Merchant
+from django.contrib.auth import authenticate
+from django.contrib.auth import login as auth_login
+from django.contrib.auth import logout as auth_logout
+from django.shortcuts import get_object_or_404
+from django.contrib.auth.decorators import login_required
+from django.shortcuts import render, redirect
+from django.core.urlresolvers import resolve
+
+# Create your views here.
+
+
address@hidden
+def home(request):
+    return render(request, 'inventory/home.html')
+
+
+def signup(request):
+    if request.method == 'POST':
+        form = SignUpForm(request.POST)
+        details_form = MerchantDetailForm(request.POST)
+        if form.is_valid():
+            form.save()
+            username = form.cleaned_data.get('username')
+            raw_password = form.cleaned_data.get('password1')
+            user = authenticate(username=username, password=raw_password)
+            auth_login(request, user)
+            instance = get_object_or_404(Merchant, user=user)
+            if details_form.is_valid():
+                instance.address = details_form.cleaned_data.get('address')
+                instance.save()
+            else:
+                print("somethings wrong with the form")
+            # Redirect to a success page.
+            return redirect('home')
+    else:
+        form = SignUpForm()
+        details_form = MerchantDetailForm()
+    dictionary = {'form': form, 'details_form': details_form}
+    return render(request, 'inventory/signup.html', dictionary)
+
+
+def login(request):
+    form = LoginForm()
+    context_dict = {}
+    context_dict['form'] = form
+    error_message = ""
+    if request.method == 'POST':
+        username = request.POST['username']
+        password = request.POST['password']
+        user = authenticate(username=username, password=password)
+        if user is not None:
+            auth_login(request, user)
+            current_url = resolve(request.path_info).url_name
+            print(current_url)
+            # Redirect to a success page.
+            return redirect('home')
+        else:
+            error_message = "You are not a registered user please sign up"
+            form = LoginForm()
+            context_dict['form'] = form
+            context_dict['error_message'] = error_message
+    return render(request, 'inventory/login.html', context_dict)
+
+
+def logout(request):
+    auth_logout(request)
+    return render(request, 'inventory/index.html')
diff --git a/manage.py b/manage.py
new file mode 100755
index 0000000..b812476
--- /dev/null
+++ b/manage.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python3
+import os
+import sys
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "codeless.settings")
+
+    from django.core.management import execute_from_command_line
+
+    execute_from_command_line(sys.argv)
diff --git a/templates/inventory/home.html b/templates/inventory/home.html
new file mode 100644
index 0000000..424bab3
--- /dev/null
+++ b/templates/inventory/home.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+       <title>Home</title>
+</head>
+<body>
+<h1>Welcome!!!!</h1>
+<h4>You are successfully loged in</h4>
+<a href="/logout">logout</a></li> 
+</body>
+</html>
\ No newline at end of file
diff --git a/templates/inventory/index.html b/templates/inventory/index.html
new file mode 100644
index 0000000..ab79a2b
--- /dev/null
+++ b/templates/inventory/index.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+       <title>Login</title>
+</head>
+<body>
+<div style="background: linear-gradient(0deg, #F6F0E1 20%, rgba(200,200,200,0) 
100%); height: 100%"; >
+  <div>
+    <div>
+      <p>Login</p>
+    </div>
+    
+    <form method="post">
+       <div>
+        <span>Login</span>
+        <a href="/login">Log in</a>
+      </div>
+      <div>
+        <span>New User?</span>
+        <a href="/signup">Create Account</a>
+      </div>
+    </div>
+        
+      </fieldset>
+    </form>
+    
+  </div>
+</div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/templates/inventory/login.html b/templates/inventory/login.html
new file mode 100644
index 0000000..d407b3f
--- /dev/null
+++ b/templates/inventory/login.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+<head>
+       <title>Login</title>
+</head>
+<body>
+<div style="background: linear-gradient(0deg, #F6F0E1 20%, rgba(200,200,200,0) 
100%); height: 100%"; >
+  <div>
+    <div>
+      <p>Login</p>
+    </div>
+    
+    <form method="post">
+      {% csrf_token %}
+    
+      <fieldset>
+        {% for field in form %}
+        <div>
+          <p>
+        {{ field.label_tag }}<br>
+        {{ field }}
+        {% if field.help_text %}
+          <small style="color: grey">{{ field.help_text }}</small>
+        {% endif %}
+        </div>
+        
+        {% endfor %}
+        
+      </fieldset>
+      <fieldset>
+        {{error_message}}
+        <button type="submit">Log in</button>
+
+        <div>
+      <div>
+        <span>New User?</span>
+        <a href="/signup">Create Account</a>
+      </div>
+    </div>
+        
+      </fieldset>
+    </form>
+    
+  </div>
+</div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/templates/inventory/signup.html b/templates/inventory/signup.html
new file mode 100644
index 0000000..5a0137f
--- /dev/null
+++ b/templates/inventory/signup.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Sign Up</title>
+</head>
+<body>
+<div <div style="background: linear-gradient(0deg, #F6F0E1 20%, 
rgba(200,200,200,0) 100%); height: 100%"; >
+    <h1>Sign up</h1> 
+    {% block content %}
+      
+      <form method="post" enctype="multipart/form-data">
+        {% csrf_token %}
+        {% for field in form %}
+          <p>
+            {{ field.label_tag }}<br>
+            {{ field }}
+            {% if field.help_text %}
+              <small style="color: grey">{{ field.help_text }}</small>
+            {% endif %}
+            {% for error in field.errors %}
+              <p style="color: red">{{ error }}</p>
+            {% endfor %}
+          </p>
+        {% endfor %}
+
+        {% for field in details_form %}
+          <p>
+            {{ field.label_tag }}<br>
+            {{ field }}
+            {% if field.help_text %}
+              <small style="color: grey">{{ field.help_text }}</small>
+            {% endif %}
+            {% for error in field.errors %}
+              <p style="color: red">{{ error }}</p>
+            {% endfor %}
+          </p>
+        {% endfor %}
+        <button type="submit">Sign up</button>
+      </form>
+
+      <div>
+    {% endblock %}
+</div>
+</body>
+</html>
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]