Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from __future__ import unicode_literals
- from flask import (
- Flask, render_template, url_for, redirect, request, session, flash
- )
- from flask.ext.script import Manager, Server
- from flask.ext.bootstrap import Bootstrap
- import forms
- app = Flask(__name__)
- server = Server(host='0.0.0.0', port='5000')
- app.secret_key = 'Some mega ultra hiper secret key'
- manager = Manager(app)
- manager.add_command('runserver', server)
- bootstrap = Bootstrap(app)
- IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.gif', '.png']
- @app.route('/')
- def index():
- """
- if user is logged:
- render template index.html with user name in "name" parameter
- else:
- just render template index.html
- """
- form = forms.LoginForm()
- if 'username' in session:
- return render_template("index.html",name=session['username'])
- else:
- return render_template("index.html")
- @app.route('/browse')
- def browse():
- """
- render template with get_images function in "images" parameter
- """
- return render_template("browse.html",images=get_images())
- @app.route('/register', methods=['GET', 'POST'])
- def register():
- """
- function to register users.
- Checks if user already exists in users.txt using user_exists function.
- if user exists:
- flash message: "Sorry but user with given username already exists"
- and redirect to register.html
- Rendered based on RegistrationForm.
- """
- form = forms.RegistrationForm(request.form)
- if request.method == 'POST':
- if user_exists(form.username.data):
- flash('Sorry but user with given username already exists')
- return redirect(url_for('register'))
- else:
- with open('users.txt', 'a+') as f:
- f.write('\n'+form.username.data+':'+form.password.data)
- flash('User added')
- return redirect(url_for('login'))
- return render_template('register.html', form=form)
- @app.route('/login', methods=['GET', 'POST'])
- def login():
- """
- if user provide corrected login and password combination:
- flash message: "You have been logged successfully"
- and redirect to index.html
- else:
- render login.html template with LoginForm as "form" parameter
- """
- form = forms.LoginForm()
- if request.method == 'POST':
- if user_exists(request.form['username']) and validate_password(request.form['username'],request.form['password']):
- session['username'] = request.form['username']
- flash('You have been logged successfully')
- return redirect(url_for('index'))
- else:
- flash('User not exists or wrong password')
- return render_template("login.html",form=form)
- else:
- return render_template("login.html",form=form)
- @app.route('/logout')
- def logout():
- """
- Pop user from session, send flash message:
- "You have been logged out succesfully"
- and redirect to index page
- """
- session['username'] = ""
- flash('You have been logged successfully')
- return redirect(url_for('index'))
- def validate_password(username, password):
- """
- Helper function for login().
- Checks if username and password combination match to data in users.txt
- @param username: user name
- @param password: user password
- @return: True or False
- """
- u = {}
- with open('users.txt', 'r') as f:
- for line in f:
- (key,val)=line.split(":")
- u.setdefault(key, val)
- if u[username]==password:
- return True
- else:
- return False
- def user_exists(username):
- """
- Helper function for register().
- Checks if user exists in users.txt
- @param username: user name
- @return: True or False
- """
- with open('users.txt', 'r') as f:
- users = f.read()
- if username in users:
- return True
- else:
- return False
- def get_images():
- """
- Helper function for browse()
- Creates reversed list with urls to images taken from images.txt file
- """
- ob=[]
- with open('images.txt', 'r') as f:
- for line in f:
- ob.append(line)
- return sorted(ob,reverse=True)
- @app.errorhandler(404)
- def page_not_found(e):
- """
- render template 404.html and send 404 http status
- """
- return render_template("404.html"),404
- @app.errorhandler(500)
- def internal_server_error(e):
- """
- render template 500.html and send 500 http status
- """
- return render_template("500.html"),500
- @app.route('/add', methods=['GET', 'POST'])
- def add():
- """
- Render add.html with forms.AdditionForm(request.form)as "form" param
- if form is correct open images.txt file and add url to next line, then
- flash message: 'Photo added succesfully' and redirect to browse.html
- """
- form = forms.AdditionForm()
- if request.form:
- with open('images.txt', 'a+') as f:
- f.write('\n'+request.form['url'])
- flash('Photo added succesfully')
- return redirect(url_for('browse'))
- else:
- return render_template("add.html",form=forms.AdditionForm(request.form))
- if __name__ == '__main__':
- manager.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement