Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from flask import Flask, flash, render_template, request, session, Markup, url_for, redirect
- from flask.ext.login import LoginManager, login_user
- import os
- from flask_sqlalchemy import SQLAlchemy
- import datetime
- from werkzeug.utils import secure_filename
- UPLOAD_FOLDER = 'static/zdjecia/'
- ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
- app = Flask(__name__)
- app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:damian123@localhost/sklep'
- app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
- db = SQLAlchemy(app)
- login_manager = LoginManager()
- @login_manager.user_loader
- def load_user(user_id):
- return User.get(user_id)
- def allowed_file(filename):
- return '.' in filename and \
- filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
- class Product(db.Model):
- __tablename__ = "product"
- id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- name = db.Column(db.String)
- description = db.Column(db.String)
- price = db.Column(db.Integer)
- total_quantity = db.Column(db.Integer)
- image = db.Column(db.String)
- def __init__(self, name, description, price, total_quantity, image):
- self.name = name
- self.description = description
- self.price = price
- self.total_quantity = total_quantity
- self.image = image
- @property
- def image_url(self):
- if self.image:
- return 'static/zdjecia/%s' % self.image
- return 'static/img/portfolio/%d.jpg' % self.id
- class ProductUser(db.Model):
- __tablename__ = "userproducts"
- id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- quantity = db.Column(db.Integer)
- product_id = db.Column(db.Integer, db.ForeignKey('product.id'))## Powiazanie do tabeli product
- product = db.relationship('Product',
- backref=db.backref('users', lazy='dynamic'))
- user_id = db.Column(db.Integer, db.ForeignKey('users.id')) ##Powiazanie do tabeli users
- user = db.relationship('User',
- backref=db.backref('products', lazy='dynamic'))
- class User(db.Model):
- __tablename__ = "users"
- id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- username = db.Column(db.String)
- password = db.Column(db.String)
- is_admin = db.Column(db.Integer)
- email = db.Column(db.String)
- name = db.Column(db.String)
- surname = db.Column(db.String)
- address = db.Column(db.String)
- def __init__(self, username, password,is_admin,email, name, surname, address):
- self.username = username
- self.password = password
- self.is_admin = is_admin
- self.email = email
- self.name = name
- self.surname = surname
- self.address = address
- def __repr__(self):
- return '<User %r>' % self.username
- @property
- def is_authenticated(self):
- return True
- def is_active(self):
- return True
- def is_anonymous(self):
- return True
- class ProductOrder(db.Model):
- __tablename__ = "orderproducts"
- quantity = db.Column(db.Integer)
- price = db.Column(db.Integer)
- product_id = db.Column(db.Integer, db.ForeignKey('product.id'),
- primary_key=True)## Powiazanie do tabeli product
- product = db.relationship('Product',
- backref=db.backref('orders', lazy='dynamic'))
- order_id = db.Column(db.Integer, db.ForeignKey('orders.id'),
- primary_key=True)## Powiazanie do tabeli order
- order = db.relationship('Order',
- backref=db.backref('products', lazy='dynamic'))
- class Order(db.Model):
- __tablename__ = "orders"
- id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- total = db.Column(db.Integer)
- created_date = db.Column(db.DateTime, default=datetime.datetime.utcnow)
- user_id = db.Column(db.Integer, db.ForeignKey('users.id')) ##Powiazanie do tabeli users
- user = db.relationship('User',
- backref=db.backref('orders', lazy='dynamic'))
- @app.route('/', methods = ['GET','POST'])
- def home():
- if not session.get('zalogowany'):
- producttoShow = Product.query.all()
- return render_template('index.html', product_show = producttoShow, )
- else:
- #pokazuje produkt w indexie
- producttoShow = Product.query.all()
- if request.method == 'POST':
- quantity = int(request.form['quantity'])
- product_id = request.form['product_id']
- product = Product.query.filter_by(id=product_id).first()
- if product.total_quantity < quantity:
- flash(Markup('<center><p>Brak podanej ilosci</center></p>'))
- else:
- dodano = ProductUser()
- dodano.user_id = session['user_id']
- dodano.product = product
- dodano.quantity = quantity
- product.total_quantity -= quantity
- db.session.add(product)
- db.session.add(dodano)
- db.session.commit()
- flash(Markup('<center><p>Dodano do koszyka</center></p>'))
- return render_template('index.html', product_show = producttoShow)
- @app.route('/profil', methods = ['GET','POST'])
- def profil():
- if session.get('zalogowany'):
- cos = ProductUser.query.filter_by(user_id=session['user_id']).all() # Wyswietlanie koszyka
- username = session['user_name']
- usertoShow = User.query.filter_by(username=username).first()
- #Dodawanie sumy
- total = 0
- for i in cos:
- total += i.quantity * i.product.price
- #Usuwanie z koszyka
- if request.method == 'POST':
- pid = request.form['id']
- usunieto = ProductUser.query.filter_by(id=pid).first()
- db.session.delete(usunieto)
- db.session.commit()
- return redirect(url_for('profil'))
- return render_template('profil.html', user_show = usertoShow,
- koszyk_show = cos,
- suma_show = total)
- else:
- return render_template('login.html')
- #Rejestracja
- @app.route('/register', methods =['GET','POST'])
- def register():
- if request.method == 'GET':
- return render_template('register.html')
- elif request.method == 'POST':
- username = str(request.form['username'])
- password = str(request.form['password'])
- email = str(request.form['email'])
- is_admin = '0'
- name = 'Brak'
- surname = 'Brak'
- address = 'Brak'
- user = User(username=username, password=password, is_admin=is_admin,
- email=email,name=name, surname=surname,address=address)
- if (len(username) >=2 and len(username) <15) and (len(password) >=4 and len(password) <15):
- db.session.add(user)
- db.session.commit()
- flash(Markup('Zarejestrowales uzytkownika o nazwie <b>{0}</b>. Prosze sie zalogowac'.format(username)))
- return render_template('login.html')
- else:
- flash('Login lub haslo musi zawierac wiecej niz 2 i mniej niz 15 znakow')
- return render_template('register.html')
- ##Logowanie
- @app.route('/login', methods=['GET','POST'])
- def login():
- if request.method == 'POST':
- username = str(request.form['username'])
- password = str(request.form['password'])
- result = User.query.filter_by(username=username,password=password).first()
- if result:
- login_user(User)
- return redirect(url_for('profil'))
- else:
- flash(Markup(
- '<p><font color="red">Zly login lub haslo.<br>Chcialbys sie </font><a href="/register">zarejestrowac?</a></p>'))
- return render_template('login.html')
- elif not request.method == 'POST':
- flash(Markup(''))
- return render_template('login.html')
- @app.route('/profil/managepw', methods = ['GET','POST'])
- def zmiana_hasla():
- if session.get('zalogowany'):
- username = session['user_name']
- usertoShow = User.query.filter_by(username=username).first()
- if request.method == 'POST':
- pw = str(request.form['password'])
- rw = str(request.form['newpassword'])
- if usertoShow.password == rw:
- flash(Markup('<b>Twoje nowe haslo musi roznic sie od starego</b>'))
- return redirect(url_for('zmiana_hasla'))
- elif usertoShow.password == pw:
- usertoShow.password = rw
- db.session.commit()
- flash(Markup('<b>Zmieniono haslo</b>'))
- return redirect(url_for('zmiana_hasla'))
- else:
- flash(Markup('<b>Podaj swoje stare haslo i nowe haslo</b>'))
- return redirect(url_for('zmiana_hasla'))
- return render_template('pw.html', user_show = usertoShow,
- )
- else:
- return render_template('login.html')
- @app.route('/profil/managemail', methods = ['GET','POST'])
- def zmiana_emaila():
- if session.get('zalogowany'):
- username = session['user_name']
- usertoShow = User.query.filter_by(username=username).first()
- if request.method == 'POST':
- pw = str(request.form['password'])
- rw = str(request.form['newemail'])
- if usertoShow.email == rw:
- flash(Markup('<b>Nowy adres email musi sie roznic od starego adresu</b>'))
- return redirect(url_for('zmiana_emaila'))
- elif usertoShow.password == pw:
- usertoShow.email = rw
- db.session.commit()
- flash(Markup('<b>Zmieniono adres email</b>'))
- return redirect(url_for('zmiana_emaila'))
- else:
- flash(Markup('<b>Podaj swoje stare haslo i nowy adres email</b>'))
- return redirect(url_for('zmiana_emaila'))
- return render_template('pe.html', user_show = usertoShow,
- )
- else:
- return render_template('login.html')
- @app.route('/profil/zamowienia')
- def zamowienia():
- if session.get('zalogowany'):
- cos = Order.query.filter_by(user_id=session['user_id']).all()
- username = session['user_name']
- usertoShow = User.query.filter_by(username=username).first()
- return render_template('zamowienia.html', user_show=usertoShow,
- zamowienia_show=cos)
- else:
- return render_template('login.html')
- @app.route('/profil/zamowienie')
- def zamowienie():
- if session.get('zalogowany'):
- cos = ProductUser.query.filter_by(user_id=session['user_id']).all() # Wyswietlanie koszyka
- username = session['user_name']
- usertoShow = User.query.filter_by(username=username).first()
- # Dodawanie sumy
- total = 0
- for i in cos:
- total += i.quantity * i.product.price
- return render_template('zamowienie.html', user_show=usertoShow,
- koszyk_show=cos,
- suma_show=total)
- else:
- return render_template('login.html')
- @app.route('/profil/zamowienie/buy')
- def zamowienie_zloz():
- if session.get('zalogowany'):
- username = session['user_name']
- usertoShow = User.query.filter_by(username=username).first()
- produkty_w_koszyku = ProductUser.query.filter_by(user_id=session['user_id']).all()
- o = Order(user=usertoShow,total=0)
- # Dodawanie sumy
- ptr = {}
- total = 0
- for ppp in produkty_w_koszyku:
- pp = ppp.quantity * ppp.product.price
- total += pp
- if ppp.product_id in ptr:
- ptr[ppp.product_id][1] += ppp.quantity
- else:
- ptr[ppp.product_id] = [ppp, ppp.quantity]
- db.session.delete(ppp)
- for key, rw in ptr.items():
- ppp, quantity = rw
- pp = quantity * ppp.product.price
- op = ProductOrder(order=o, product=ppp.product, quantity=quantity, price=pp)
- db.session.add(op)
- o.total = total
- db.session.add(o)
- db.session.commit()
- flash(Markup('<b>Zlozono zamowienie.</b>'))
- return redirect(url_for('zamowienia'))
- else:
- return render_template('login.html')
- @app.route('/profil/personal', methods = ['GET','POST'])
- def zmiana_danych():
- if session.get('zalogowany'):
- username = session['user_name']
- usertoShow = User.query.filter_by(username=username).first()
- if request.method == 'POST':
- i_n = str(request.form['imie'])
- n_n = str(request.form['nazwisko'])
- adres = str(request.form['adres'])
- if len(i_n) < 1 or len(n_n) < 1 or len(adres) < 1:
- flash(Markup('<b>Musisz wypelnic pola</b>'))
- return redirect(url_for('zmiana_danych'))
- else:
- usertoShow.name = i_n
- usertoShow.surname = n_n
- usertoShow.address = adres
- db.session.commit()
- flash(Markup('<b>Przypisano twoje dane personalne</b>'))
- return redirect(url_for('zmiana_danych'))
- return render_template('personal.html', user_show = usertoShow,
- )
- else:
- return render_template('login.html')
- @app.route("/profil/admin", methods=['GET','POST'])
- def isadmin():
- username = session['user_name']
- usertoShow = User.query.filter_by(username=username).first()
- if usertoShow.is_admin:
- if request.method == 'GET':
- return render_template('admin.html')
- elif request.method == 'POST':
- file = request.files['file']
- if not file or not allowed_file(file.filename):
- return render_template('404.html')
- filename = secure_filename(file.filename)
- file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
- name = str(request.form['name'])
- desc = str(request.form['description'])
- price = str(request.form['price'])
- total_q = str(request.form['total_q'])
- produktadd = Product(name=name, description=desc, price=price,
- total_quantity=total_q,image=filename)
- db.session.add(produktadd)
- db.session.commit()
- return render_template('admin.html', user_show = usertoShow)
- else:
- return render_template('404.html')
- ###Logout
- @app.route("/logout")
- def logout():
- session['zalogowany'] = False
- return home()
- ##404
- @app.errorhandler(404)
- def nie_znaleziono(e):
- return render_template("404.html")
- if __name__ == "__main__":
- app.secret_key = os.urandom(12)
- app.run(host='0.0.0.0', port=4567)
- login_manager.init_app(app)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement