Advertisement
steeze206

Django Poke App

Dec 29th, 2017
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.20 KB | None | 0 0
  1. ^^^ login_app ^^^
  2.  
  3. ** models.py **
  4.  
  5. # -*- coding: utf-8 -*-
  6. from __future__ import unicode_literals
  7. import re
  8. import bcrypt
  9. from django.db import models
  10.  
  11. # Create your models here.
  12.  
  13. class UserManager(models.Manager):
  14.     def loginVal(self, postData):
  15.         results = {'status': True, 'errors':[], 'user': None}
  16.         users = self.filter(email = postData['email'])
  17.         if len(users) < 1:
  18.             results['status'] = False
  19.         else:
  20.             if bcrypt.checkpw(postData['password'].encode(), users[0].password.encode()):
  21.                 results['user'] = users[0]
  22.             else:
  23.                 results['status'] = False
  24.         return results
  25.  
  26.     def creator(self, postData):
  27.         user = self.create(name = postData['name'], alias = postData['alias'], email = postData['email'], password = bcrypt.hashpw(postData["password"].encode(), bcrypt.gensalt()))
  28.         return user
  29.    
  30.     def validate(self, postData):
  31.         results = {"status": True, "errors":[]}
  32.        
  33.         if len(postData['name']) < 3:
  34.             results['errors'].append('Your name is too short.')
  35.             results['status'] = False
  36.        
  37.         if len(postData['alias']) < 3:
  38.             results['errors'].append('Your alias is too short.')
  39.             results['status'] = False
  40.        
  41.         if not re.match("[^@]+@[^@]+\.[^@]+", postData["email"]):
  42.             results['errors'].append('Your email is not valid.')
  43.             results['status'] = False
  44.        
  45.         if postData["password"] != postData["c_password"]:
  46.             results['errors'].append('Your passwords do not match.')
  47.             results['status'] = False
  48.  
  49.         if len(postData['password']) < 8:
  50.             results['errors'].append('Your password is too short.')
  51.             results['status'] = False
  52.  
  53.         if len(self.filter(email = postData['email'])) >0:
  54.             results['errors'].append('User already exists.')
  55.             results['status'] = False
  56.        
  57.         return results
  58.  
  59. class User(models.Model):
  60.     name = models.CharField(max_length=255)
  61.     alias = models.CharField(max_length=255)
  62.     email = models.CharField(max_length=255)
  63.     password = models.CharField(max_length=255)
  64.     objects = UserManager()
  65.  
  66. ** urls.py **
  67.  
  68. from django.conf.urls import url
  69. from . import views
  70.  
  71. urlpatterns = [
  72.     url(r'^$', views.index),
  73.     url(r'^register$', views.register),
  74.     url(r'^login$', views.login),
  75.     url(r'^dashboard$', views.dashboard),
  76.     url(r'^logout$', views.logout),
  77. ]
  78.  
  79. ** views.py **
  80.  
  81. # -*- coding: utf-8 -*-
  82. from __future__ import unicode_literals
  83. from models import User
  84. # from ..rebelt_app.models import Quotes
  85. from django.shortcuts import render, HttpResponse, redirect
  86. from django.contrib import messages
  87.  
  88. # Create your views here.
  89.  
  90. def index(request):
  91.     # User.objects.all().delete()
  92.     return render(request, "login.html")
  93.  
  94. def register(request):
  95.     results = User.objects.validate(request.POST)
  96.     if results['status'] == True:
  97.         user = User.objects.creator(request.POST)
  98.         messages.success(request, 'User has been created.')
  99.     else:
  100.         for error in results['errors']:
  101.             messages.error(request, error)
  102.     return redirect("/")
  103.  
  104. def login(request):
  105.     results = User.objects.loginVal(request.POST)
  106.     if results['status'] == False:
  107.         messages.error(request, "Please check your credentials, then try again.")
  108.         return redirect('/')
  109.     request.session['email'] = results['user'].email
  110.     request.session['name'] = results['user'].name
  111.     return redirect('/pokes')
  112.  
  113. def dashboard(request):
  114.     if 'email' not in request.session:
  115.         return redirect('/')
  116.     return render(request, 'dashboard.html', { "quotes": Quotes.objects.all()})
  117.  
  118. def logout(request):
  119.     request.session.flush()
  120.     return redirect('/')
  121.  
  122.  
  123. ** login.html **
  124.  
  125. <!DOCTYPE html>
  126. <html lang="en">
  127. <head>
  128.     <meta charset="UTF-8">
  129.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  130.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  131.     <title>Login/Registration</title>
  132. </head>
  133. <body>
  134.  
  135.     {% if messages %}
  136.         {% for message in messages %}
  137.             <p>{{message}}</p>
  138.         {% endfor %}
  139.     {% endif %}
  140.  
  141.     <form action="/register" method="post">
  142.         {% csrf_token %}
  143.         <h2>Register here</h2>
  144.         <label for="name">Enter your name</label> <br>
  145.         <input type="text" name="name" id=""> <br> <br>
  146.         <label for="alias">Enter your alias</label> <br>
  147.         <input type="text" name="alias" id=""> <br> <br>
  148.         <label for="email">Enter your email</label> <br>
  149.         <input type="text" name="email" id=""> <br> <br>
  150.         <label for="password">Enter your password</label> <br>
  151.         <input type="text" name="password" id="" placeholder="minimum 8 characters"> <br> <br>
  152.         <label for="c_password">Confirm your password</label> <br>
  153.         <input type="text" name="c_password" id="" placeholder="passwords must match"> <br> <br>
  154.         <!-- <label for="dob">Enter your date of birth</label> <br>
  155.         <input type="date" name="dob" id=""> -->
  156.         <input type="submit" value="Submit">
  157.     </form>
  158.     <h3>Login here</h3>
  159.     <form action="/login" method="post">
  160.         {% csrf_token %}
  161.         <input type="text" name="email" placeholder="Enter your email"> <br> <br>
  162.         <input type="text" name="password" placeholder="Enter your password"> <br> <br>
  163.         <input type="submit" value="Login">
  164.     </form>
  165. </body>
  166. </html>
  167.  
  168.  
  169.  
  170.  
  171. ^^^ pokes_app ^^^
  172.  
  173. ** models.py **
  174.  
  175. # -*- coding: utf-8 -*-
  176. from __future__ import unicode_literals
  177. from ..login_app.models import *
  178. from django.db import models
  179.  
  180. # Create your models here.
  181.  
  182.  
  183. class Poke(models.Model):
  184.     poker = models.ForeignKey(User, related_name="pokerpokes")
  185.     poked = models.ForeignKey(User, related_name="pokedpokes")
  186.     created_at = models.DateField(null=True)
  187.     counter = models.IntegerField(blank=False, default=0, null=True)
  188.     total = models.IntegerField(blank=False, default=0, null=True)
  189.  
  190.  
  191. ** urls.py **
  192.  
  193. from django.conf.urls import url
  194. from . import views
  195.  
  196. urlpatterns = [
  197.     url(r'^pokes$', views.pokes),
  198.     url(r'^button$', views.button),
  199.  
  200. ]
  201.  
  202.  
  203. ** views.py **
  204.  
  205. # -*- coding: utf-8 -*-
  206. from __future__ import unicode_literals
  207. from models import Poke
  208. from ..login_app.models import *
  209. from django.shortcuts import render, HttpResponse, redirect
  210. from django.contrib import messages
  211. from datetime import date
  212.  
  213. # Create your views here.
  214.  
  215. def pokes(request):
  216.     welcome = request.session['name']
  217.     print (request.session['name'])
  218.     return render(request, "dashboard.html", {"welcome": request.session['name'], "users": User.objects.all().exclude(name=request.session['name'])})
  219.  
  220.  
  221.  
  222. def button(request):
  223.     return redirect("/pokes")
  224.  
  225.  
  226. ** dashboard.html **
  227.  
  228. <!DOCTYPE html>
  229. <html lang="en">
  230. <head>
  231.     <meta charset="UTF-8">
  232.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  233.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  234.     <title>Pokes</title>
  235.     <style>
  236.  
  237.         .Container {
  238.             position: relative;
  239.             width: 970px;
  240.             margin: 0 auto;
  241.             padding: 0;
  242.         }
  243.  
  244.         .Head h1{
  245.             margin-bottom: 0;
  246.         }
  247.  
  248.         .Head h3 {
  249.             margin-top: 0;
  250.             font-weight: normal;
  251.         }
  252.  
  253.         .Head h4 a {
  254.             position: absolute;
  255.             right: 0px;
  256.             top: 20px;
  257.             font-size: 130%;
  258.             text-decoration: none;
  259.         }
  260.  
  261.         .Head h4 a:hover {
  262.             color: #000;
  263.         }
  264.  
  265.         table {
  266.             border: 1px solid black;
  267.             border-spacing: 30px 5px;
  268.         }
  269.  
  270.         table a {
  271.             border: 2px solid #000;
  272.             color: #000000;
  273.             display: block;
  274.             text-align: center;
  275.             padding: 5px 10px;
  276.             text-decoration: none;
  277.            
  278.         }
  279.  
  280.         p {
  281.             margin-bottom: 5px;
  282.         }
  283.     </style>
  284. </head>
  285. <body>
  286.     <div class="Container">
  287.         <div class="Head">
  288.             <h1>Welcome, {{ welcome }}</h1>
  289.             <h3>*** people poked you!</h3>
  290.             <h4><a href="/logout">Logout</a></h4>
  291.         </div>
  292.  
  293.         <div class="Poked-you">
  294.  
  295.         </div>
  296.  
  297.         <div class="People">
  298.             <p>People you may want to poke:</p>
  299.             <table>
  300.                 <thead>
  301.                     <tr>
  302.                         <th>Name</th>
  303.                         <th>Alias</th>
  304.                         <th>Email Address</th>
  305.                         <th>Poke History</th>
  306.                         <th>Action</th>
  307.                     </tr>
  308.                 </thead>
  309.                 <tbody>
  310.                     {% for user in users %}
  311.                     <tr>
  312.                         <td>{{ user.name }}</td>
  313.                         <td>{{ user.alias }}</td>
  314.                         <td>{{ user.email }}</td>
  315.                         <td>Blank</td>
  316.                         <td><a href="/button">Poke</a></td>
  317.                     </tr>
  318.                     {% endfor %}
  319.                 </tbody>
  320.             </table>
  321.         </div>
  322.     </div>
  323. </body>
  324. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement