· 8 years ago · Dec 30, 2017, 01:50 AM
1^^^ login_app ^^^
2
3** models.py **
4
5# -*- coding: utf-8 -*-
6from __future__ import unicode_literals
7import re
8import bcrypt
9from django.db import models
10
11# Create your models here.
12
13class 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
59class 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
68from django.conf.urls import url
69from . import views
70
71urlpatterns = [
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 -*-
82from __future__ import unicode_literals
83from models import User
84# from ..rebelt_app.models import Quotes
85from django.shortcuts import render, HttpResponse, redirect
86from django.contrib import messages
87
88# Create your views here.
89
90def index(request):
91 # User.objects.all().delete()
92 return render(request, "login.html")
93
94def 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
104def 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
113def dashboard(request):
114 if 'email' not in request.session:
115 return redirect('/')
116 return render(request, 'dashboard.html', { "quotes": Quotes.objects.all()})
117
118def 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 -*-
176from __future__ import unicode_literals
177from ..login_app.models import *
178from django.db import models
179
180# Create your models here.
181
182
183class 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
193from django.conf.urls import url
194from . import views
195
196urlpatterns = [
197 url(r'^pokes$', views.pokes),
198 url(r'^button$', views.button),
199
200]
201
202
203** views.py **
204
205# -*- coding: utf-8 -*-
206from __future__ import unicode_literals
207from models import Poke
208from ..login_app.models import *
209from django.shortcuts import render, HttpResponse, redirect
210from django.contrib import messages
211from datetime import date
212
213# Create your views here.
214
215def 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
222def 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>