-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.py
153 lines (136 loc) · 5.3 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/usr/bin/python3.6
from flask import Flask, request, jsonify, render_template, session, redirect, flash
from flask_mysqldb import MySQL
from os import urandom
from yaml import load, FullLoader
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
mysql = MySQL(app)
# MySQL Configuration
db_keeps = load(open('db.yaml'), Loader=FullLoader)
app.config['MYSQL_HOST'] = db_keeps['mysql_host']
app.config['MYSQL_USER'] = db_keeps['mysql_user']
app.config['MYSQL_PASSWORD'] = db_keeps['mysql_password']
app.config['MYSQL_DB'] = db_keeps['mysql_db']
app.config['SECRET_KEY'] = urandom(24)
@app.after_request
def add_headers(response):
response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization, data')
return response
@app.route('/')
def index():
cur = mysql.connection.cursor()
session['user_id'] = 1
q = cur.execute("SELECT * FROM open_projects;")
if q > 0:
projects = cur.fetchall()
return render_template('my_index.html', projects=projects)
else:
return jsonify({'response' : 'error', 'message': "No Database Entries Found", 'keeps': int(q)})
@app.route('/register/', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
user = request.form
full_name = user['full_name']
email = user['email']
password = user['password']
linkedin = user['linkedin']
github = user['github']
skills = user['skills']
role = user['role']
links = user['links']
registration_number = user['registration_number']
batch = user['batch']
if password != user['confirmPassword']:
flash("Passwords do not match", "danger")
return render_template('register.html')
if len(password) < 8:
flash("Password Length too short, Please use longer password", "danger")
return render_template('register.html')
password = generate_password_hash(password)
cur = mysql.connection.cursor()
cur.execute("INSERT INTO profile(full_name, email, password, linkedin, github, skills, role, links, registration_number, batch) values(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s);", (full_name, email, password, linkedin, github, skills, role, links, registration_number, batch))
mysql.connection.commit()
cur.close()
flash("Registration Successful !! Please Login to continue", "success")
return redirect('/login/')
return render_template('register.html')
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
userDetails = request.form
email_id = userDetails['email']
userpass = userDetails['password']
cur = mysql.connection.cursor()
usercheck = cur.execute("SELECT * FROM user WHERE email=%s", ([username]))
if usercheck > 0:
user = cur.fetchone()
checker = check_password_hash(user[-4], userpass)
print(checker)
if checker:
session['logged_in'] = True
session['full_name'] = user[1]
session['user_id'] = user[0]
flash(f"Welcome {session['full_name']}!! Your Login is Successful", 'success')
else:
cur.close()
flash('Wrong Password!! Please Check Again.', 'danger')
return render_template('login.html')
else:
cur.close()
flash('User Does Not Exist!! Please Enter Valid Username.', 'danger')
return render_template('login.html')
cur.close()
return redirect('/')
return render_template('login.html')
@app.route('/project/<int:id>/')
def project(id):
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM open_projects WHERE project_id={};".format(id))
info = cur.fetchone()
return render_template('project.html', info=info)
@app.route('/project/new/', methods=['GET', 'POST'])
def new_project():
if request.method == 'POST':
response = request.form
title = response['title']
description = response['description']
owner_id = session['user_id']
date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
links = response['links']
cur = mysql.connection.cursor()
cur.execute("INSERT INTO open_projects(title, description, owner_id, date, links) VALUES(%s, %s, %s, %s, %s);", (title, description, owner_id, date, links))
mysql.connection.commit()
cur.close
flash("Projects Created Successfully", "success")
return redirect('/')
return render_template('/create.html')
@app.route('/profile/me/')
def me():
id = session['user_id']
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM profile WHERE user_id={};".format(id))
q = cur.fetchone()
return render_template('profile.html', profile=q)
@app.route('/profile/<reg_no>/')
def profile(reg_no):
reg_no = str(reg_no).upper()
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM profile WHERE registration_number='{}';".format(reg_no))
q = cur.fetchone()
print(q)
return render_template('profile.html', profile=q)
@app.route('/assignments/')
def assignments():
return None
@app.errorhandler(404)
def error(e):
return jsonify({
'response' : 'failure',
'error' : '404',
'message' : str(e)
})
if __name__ == '__main__':
app.run(debug=True)