-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
126 lines (101 loc) · 4.1 KB
/
Copy pathapp.py
File metadata and controls
126 lines (101 loc) · 4.1 KB
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
from flask import Flask, render_template, flash, redirect, url_for, session, logging, request
from data import Article
from flask_mysqldb import MySQL
from wtforms import Form, StringField, TextAreaField, PasswordField, validators
from passlib.hash import sha256_crypt
# from functools import wraps
import os
app = Flask(__name__)
app.config['MYSQL_HOST'] = os.environ['MYSQL_HOST']
app.config['MYSQL_USER'] = os.environ['MYSQL_USER']
app.config['MYSQL_PASSWORD'] = os.environ['MYSQL_PASSWORD']
app.config['MYSQL_DB'] = os.environ['MYSQL_DB']
app.config['MYSQL_CURSORCLASS']= os.environ['MYSQL_CURSORCLASS']
mysql = MySQL(app)
article = Article()
@app.route('/')
def index():
return render_template('home.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/articles')
def articles():
return render_template('articles.html', articles=article)
@app.route('/article/<string:id>/')
def get_article(id):
return render_template('article.html', id=id)
class RegisterForm(Form):
name = StringField('Name', [validators.Length(min=1, max=50)])
username = StringField('Username', [validators.Length(min=4, max=25)])
email = StringField('Email', [validators.Length(min=6, max=50)])
password = PasswordField('Password', [
validators.DataRequired(),
validators.EqualTo('confirm', message='Password does not match')])
confirm = PasswordField('Confirm Password')
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm(request.form)
if request.method == 'POST' and form.validate():
name = form.name.data
email = form.email.data
username = form.username.data
password = sha256_crypt.encrypt(str(form.password.data))
cur = mysql.connection.cursor()
cur.execute("INSERT INTO users(name,email,username,password) VALUES(%s,%s,%s,%s)",
(name, email, username, password))
mysql.connection.commit()
cur.close()
flash('You are registerd', 'success')
return redirect(url_for('login'))
return render_template('register.html', form=form)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password_hash = request.form['password']
cur = mysql.connection.cursor()
result = cur.execute("SELECT * FROM users WHERE username = %s",[username])
if result > 0:
data = cur.fetchone()
password = data['password']
if sha256_crypt.verify(password_hash,password):
# app.logger.info('Passed')
session['logged_in'] = True
session['username'] = username
flash('You are now logge in','success')
return redirect(url_for('dashboard'))
else:
error = 'Invalid Password'
return render_template('login.html',error=error)
else:
error = 'Username not found'
return render_template('login.html',error=error)
return render_template('login.html')
@app.route('/dashboard')
def dashboard():
return render_template('dashboard.html')
class ArticleForm(Form):
title = StringField('Title', [validators.Length(min=1, max=200)])
body = StringField('Body', [validators.Length(min=30)])
@app.route('/add_article',methods=['GET','POST'])
def add_article():
form = ArticleForm(request.form)
if request.method=='POST' and form.validate():
title = form.title.data
body = form.body.data
cur = mysql.connection.cursor()
cur.execute('INSERT INTO articles(title,body,author) VALUES(%s,%s,%s)',(title,body,session['username']))
mysql.connection.commit()
cur.close()
flash('Article created', 'success')
return redirect(url_for('dashboard'))
return render_template('add_article.html',form=form)
@app.route('/logout')
def logout():
session.clear()
flash('You are logged out')
return redirect(url_for('login'))
if __name__ == '__main__':
app.secret_key = os.environ['SECRET_KEY']
app.run(debug=True)