def login(): """ Страница авторизации :return: вывод формы авторизации или переход на регистрацию """ form = LoginForm() if form.validate_on_submit(): # ввели логин и пароль user_name = form.username.data password = form.password.data user_model = UsersModel(db.get_connection()) # проверяем наличие пользователя в БД и совпадение пароля if user_model.exists(user_name)[0] and \ check_password_hash(user_model.exists(user_name)[1], password): session['username'] = user_name # запоминаем в сессии имя пользователя и кидаем на главную return redirect('/index') elif user_model.exists(user_name)[0]: flash('Введен неверный пароль') else: flash('Упс! Такого аккаунта не существует, повторите попытку! ') return render_template('login.html', title='Авторизация', form=form, loged=False)
def resetFixture(request): if request.method == 'POST': UsersModel.resetFixture() err ={} err{'errCode'} = 1; return HttpResponse(json.dumps(err), content_type="application/json") else: raise Http404
def post(self): args = userParser.parse_args() username = args['username'] username = username.lower() user = UsersModel.fetch_by_username(username) if user: return marshal(user, userStructure), 200 user = UsersModel(username=username) record = user.create_record() return marshal(record,userStructure),201
def put(self,uid): args = userParser.parse_args() username = args['username'].lower() if UsersModel.fetch_by_username(username): return {"message":"Username {} already exists".format(username)},409 updated = UsersModel.update_by_id(id=uid, newUsername=username) if updated: record = UsersModel.fetch_by_id(uid) return marshal(record,userStructure),200 else: return {"Message":"Record not updated"},500
def login(): form = LoginForm() if form.validate_on_submit(): user_name = form.username.data password = form.password.data user_model = UsersModel(db.get_connection()) if user_model.exists(user_name)[0] and check_password_hash( user_model.exists(user_name)[1], password): session['username'] = user_name return redirect('/index') else: flash('Пользователь или пароль не верны') return render_template('login.html', title='Авторизация', form=form)
def login(): form = LoginForm() if form.validate_on_submit(): user_name = form.username.data password = form.password.data user_model = UsersModel(db.get_connection()) if user_model.exists(user_name)[0] \ and check_password_hash(user_model.exists(user_name)[1], password): session['username'] = user_name return redirect('/index') else: flash('User or password is incorrect') return render_template('login.html', title='Authorization', form=form)
def register(): form = RegisterForm() if form.validate_on_submit(): users = UsersModel(db.get_connection()) if form.user_name.data in [u[1] for u in users.get_all()]: flash('Такой пользователь уже существует') else: users.insert(user_name=form.user_name.data, email=form.email.data, password_hash=generate_password_hash( form.password_hash.data)) return redirect(url_for('index')) return render_template("register.html", title='Регистрация пользователя', form=form)
def register(): form = RegisterForm() if form.validate_on_submit(): users = UsersModel(db.get_connection()) if form.user_name.data in [u[1] for u in users.get_all()]: flash('This user already exists.') else: users.insert(user_name=form.user_name.data, email=form.email.data, password_hash=generate_password_hash( form.password_hash.data)) return redirect(url_for('index')) return render_template("register.html", title='User registration', form=form)
def put(self,uid,pid): user = UsersModel.fetch_by_id(uid) record = user.projects for each in record: if each.id == pid: body = projectUpdateParser.parse_args() title = body['title'] if body['title'] else None description = body['description'] if body['description'] else None status = int(body['status']) if body['status'] else None startDate = None endDate = None if status == 1: startDate = datetime.now() elif status == 2: endDate = datetime.now() updated = ProjectsModel.update_by_id(id=pid, newTitle=title, newDescription=description, newStartDate=startDate, newEndDate=endDate, newStatus=status) if updated: record = ProjectsModel.fetch_by_id(pid) return record,200 else: return {},400 return {},404
def login(): # Страница авторизации переадресация на главную, либо вывод формы авторизации form = LoginForm() if form.validate_on_submit(): # ввели логин и пароль user_name = form.username.data password = form.password.data user_model = UsersModel(db.get_connection()) # проверяем наличие пользователя в БД и совпадение пароля if user_model.exists(user_name)[0] and check_password_hash( user_model.exists(user_name)[1], password) or True: session[ 'username'] = user_name # запоминаем в сессии имя пользователя и кидаем на главную return redirect('/index') else: flash('Пользователь или пароль не верны') return render_template('login.html', title='Авторизация', form=form)
def books_page(): """ Страница со всеми книгами """ books = BooksModel(db.get_connection()).get_all() authors = AuthorsModel(db.get_connection()).get_all() # страница для не авторизованного пользователя if 'username' not in session: return render_template('books_page.html', books=books, title="Книги", loged=False, admin=False, authors=authors) # страница для администратора if UsersModel(db.get_connection()).is_admin(session['username']): return render_template('books_page.html', books=books, title="Книги", loged=True, username=session['username'], admin=True, authors=authors) # страница для авторизованного пользователя return render_template('books_page.html', books=books, title="Книги", loged=True, username=session['username'], authors=authors)
def shopping(): """ Вывод интерфейса корзины """ if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') else: loged = True user = UsersModel(db.get_connection()).get_by_name(session['username']) books = BooksModel(db.get_connection()) all_books = {} # наполнение корзины покупками, если она не пустая if user[5]: for item in user[5].split('//'): if books.get(item) in all_books: all_books[books.get(item)] += 1 else: all_books[books.get(item)] = 1 return render_template('shopping.html', username=session['username'], title='Моя корзина', loged=loged, user=user, books=all_books, alert=0, disabled=False) else: # отображение пустой корзины return render_template('shopping.html', username=session['username'], title='Моя корзина', loged=loged, user=user, books={}, disabled=True)
def add_author(): """ Добавление автора """ # Ошибка, если пользователь не администратор или не зарегистрирован if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') if not UsersModel(db.get_connection()).is_admin(session['username']): return render_template('error.html', loged=False, title='Ошибка') books = BooksModel(db.get_connection()).get_all() form = AddAuthorForm() if form.validate_on_submit(): # создать автора authors = AuthorsModel(db.get_connection()) book_list = '' for item in books: if item[2] == form.name.data: book_list += item[1] + '//' book_list.rstrip('//') if form.picture.data is not None: filename = secure_filename(form.picture.data.filename) server_file = 'static/img/' + filename form.pictures.data.save(server_file) authors.insert(name=form.name.data, picture=filename, bio=form.bio.data, books=book_list) # редирект на главную страницу return redirect('index') return render_template("add_author.html", title='Добавить автора', form=form, loged=True)
def author_page(author_id): """ Вывод информации о писателе """ # проверка, авторизован ли пользователь if 'username' not in session: loged = False else: loged = True # ошибка, если такого автора нет в базе if not AuthorsModel(db.get_connection()).exists_id(str(author_id)): return render_template('error.html', loged=loged, title='Ошибка') books = BooksModel(db.get_connection()) book = [] author = AuthorsModel(db.get_connection()).get(author_id) books_author = author[4].split('//') for item in books_author: book.append(books.get_by_name(str(item))) # для авторизованного пользователя показывается список книг автора # для не авторизованного пользователя показывается только страница автора # страница для администратора if UsersModel(db.get_connection()).is_admin(session['username']): return render_template('author_info.html', title=author[1], loged=loged, author=author, book=book, admin=True) return render_template('author_info.html', title=author[1], loged=loged, author=author, book=book, admin=False)
def delete_book_shopping(book_id): """ Удаление товара в корзину из интерфейса корзины """ # ошибка, если пользователь не авторизован if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') user = UsersModel(db.get_connection()).get_by_name(session['username']) # изменение БД books = user[5].split('//') f = None for i in range(len(books)): if not f and int(books[i]) == book_id: f = i del books[f] books = '//'.join(books) UsersModel(db.get_connection()).add_book(user[0], books) return redirect('shopping')
def delete_all(): """ Очстка корзины """ if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') # изменение БД user = UsersModel(db.get_connection()).get_by_name(session['username']) UsersModel(db.get_connection()).add_book(user[0], '') user = UsersModel(db.get_connection()).get_by_name(session['username']) return render_template('shopping.html', username=session['username'], title='Моя корзина', loged=True, user=user, books='', alert=2, disabled=True)
def index(): """ Главная страница """ # загружаем списки книг и авторов books = BooksModel(db.get_connection()).get_all() authors = AuthorsModel(db.get_connection()).get_all() # страница для навторизованного пользователя if 'username' not in session: return render_template('main_page.html', books=books, title="MyBookShelf", loged=False, admin=False, authors=authors) # страница для администратора if UsersModel(db.get_connection()).is_admin(session['username']): return render_template('main_page.html', books=books, title="MyBookShelf", loged=True, username=session['username'], admin=True, authors=authors) # страница для авторизованного пользователя return render_template('main_page.html', books=books, title="MyBookShelf", loged=True, username=session['username'], authors=authors, admin=False)
def add_book_shopping(book_id): """ Добавление товара в корзину из интерфейса корзины """ # ошибка, если пользователь не авторизован if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') user = UsersModel(db.get_connection()).get_by_name(session['username']) book = BooksModel(db.get_connection()).get(book_id) # изменение БД books = user[5] + '//' + str(book_id) num = 0 for item in books.split('//'): if int(item) == book_id: num += 1 if book[7] - num >= 0: UsersModel(db.get_connection()).add_book(user[0], books) return redirect('shopping')
def buy_book(book_id): """ Добавление книги в корзину через интерфейс страницы книги """ # если пользователь не авторизован, кидаем его на страницу входа if 'username' not in session: return redirect('login') user = UsersModel(db.get_connection()).get_by_name(session['username']) book = BooksModel(db.get_connection()).get(book_id) # изменение БД if user[5]: books = user[5] + '//' + str(book_id) else: books = str(book_id) num = 0 for item in books.split('//'): if int(item) == book_id: num += 1 all_comments = [] comments = Comment.query.filter_by(book_id=book_id).all() for comment in comments: all_comments.append(str(comment).strip('<> ').split(' !! ')) author = AuthorsModel(db.get_connection()).exists(book[2]) # добавление книги в корзину, если она есть на складе if book[7] - num >= 0: UsersModel(db.get_connection()).add_book(user[0], books) return render_template('book_info.html', username=session['username'], title=book[1], loged=True, book=book, alert=1, author=author, comments=all_comments, admin=UsersModel(db.get_connection()).is_admin( session['username'])) # вывод сообщения, если книги нет на складе else: return render_template('book_info.html', username=session['username'], title=book[1], loged=True, book=book, alert=2, author=author, comments=all_comments, admin=UsersModel(db.get_connection()).is_admin( session['username']))
def get(self,uid): user = UsersModel.fetch_by_id(uid) try: record = user.projects if record: return marshal(record,project), 200 return {}, 404 except: return {"Message":"User does not exist"},404
def get(self,uid,pid): user = UsersModel.fetch_by_id(uid) try: record = user.projects for each in record: if each.id == pid: return marshal(each, project), 200 return {}, 404 except: return {"Message":"User not found"},500
def sign_in(): data = request.get_json() user = UsersModel.find_by_login(data['login']) if user and Controller.bycrpt.check_password_hash( user[0].password, data['password']): access_token = create_access_token(identity=user[0].login) return Controller.format_response({'token': access_token}, status_code=200) return Controller.format_response(errors=11, status_code=401)
def delete(self,uid,pid): user = UsersModel.fetch_by_id(uid) record = user.projects for each in record: if each.id == pid: deleted = ProjectsModel.delete_by_id(pid) if deleted: return {"Message": "Task deleted Successfully"}, 204 return {"Message":"something went wrong"},500 return {"Message":"Record not found"},404
def register(): """ Форма регистрации """ form = RegisterForm() if form.validate_on_submit(): # создать пользователя users = UsersModel(db.get_connection()) # проверка существования пользоавтеля с таким же именем if form.user_name.data in [u[1] for u in users.get_all()]: flash('Такой пользователь уже существует') else: users.insert(user_name=form.user_name.data, email=form.email.data, password_hash=generate_password_hash( form.password_hash.data)) # редирект на страницу авторизации return redirect(url_for('login')) return render_template("register.html", title='Регистрация', form=form, loged=False)
def order(): """ Обработка заказа """ if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') user = UsersModel(db.get_connection()).get_by_name(session['username']) UsersModel(db.get_connection()).add_book(user[0], '') books = BooksModel(db.get_connection()) # изменение БД if user[5]: for item in user[5].split('//'): books.buy_book(int(item), books.get(int(item))[7]) user = UsersModel(db.get_connection()).get_by_name(session['username']) return render_template('shopping.html', username=session['username'], title='Моя корзина', loged=True, user=user, books='', alert=1, disabled=True)
def add_book_admin(book_id): """ Добавление книг на склад """ # Ошибка, если пользователь не администратор или не зарегистрирован if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') if not UsersModel(db.get_connection()).is_admin(session['username']): return render_template('error.html', loged=False, title='Ошибка') # Изменение числа книг на складе book = BooksModel(db.get_connection()).get(book_id) BooksModel(db.get_connection()).add_book(book_id, book[7]) # Редирект на страницу книги return redirect('book/' + str(book_id))
def login(request): if request.method == 'POST': x = json.loads(request.body) err = {} user = x.get('username') password = x.get('password') if not user or len(user) > errors.MAX_USERNAME_LENGTH: err['errCode'] = errors.ERR_BAD_USERNAME return HttpResponse(json.dumps(err), content_type="application/json") if UsersModel.addUser(user,password) == 1: err['errCode'] = errors.SUCCESS err['count'] = UsersModel.objects.get(username=user).count; return HttpResponse(json.dumps(err), content_type="application/json") else: HttpResponse(json.dumps(UsersModel.login(user,password)), content_type="application/json") else: raise Http404
def delete_book_admin(book_id): """ Удаление существующих книг """ # Ошибка, если пользователь не администратор или не зарегистрирован if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') if not UsersModel(db.get_connection()).is_admin(session['username']): return render_template('error.html', loged=False, title='Ошибка') BooksModel(db.get_connection()).delete(book_id) # Удаление книги из всех корзин пользователей users = UsersModel(db.get_connection()).get_all() for item in users: books = item[5].split('//') if str(book_id) in books: k = [] for i in range(len(books)): if books[i] == str(book_id): k.append(i) for l in k: del books[l] '//'.join(books) UsersModel(db.get_connection()).add_book(item[0], books) # Редирект на главную страницу return redirect('index')
def add(request): if request.method == 'POST': x = json.loads(request.body) err = {} user = x.get('username') password = x.get('password') if not user or len(user) > errors.MAX_USERNAME_LENGTH: err['errCode'] = errors.ERR_BAD_USERNAME return HttpResponse(json.dumps(err), content_type="application/json") if len(password)>constants.MAX_PASSWORD_LENGTH: err['errCode'] = errors.ERR_BAD_PASSWORD return HttpResponse(json.dumps(err), content_type="application/json") if UsersModel.addUser(user,password) == 1: err['errCode'] = errors.SUCCESS err['count'] = 1 return HttpResponse(json.dumps(err), content_type="application/json") else: HttpResponse(json.dumps(UsersModel.addUser(user,password)), content_type="application/json")
def post(self,uid): args = projectParser.parse_args() dateformat = '%Y-%m-%d' title = args['title'] description = args['description'] status = 0 userId = uid if UsersModel.fetch_by_id(uid) == None: return {"message":"User not found"},404 if ProjectsModel.fetch_by_title(title): return 'project "{}" already exist'.format(title),409 project = ProjectsModel(title=title, description=description,status=status,userId=userId) record = project.create_record() print(record) return record, 201
def login(request): if request.method == "POST": request_data = json.loads(request.POST.keys()[0]) try: responseInt = UsersModel.login(**request_data) except: print traceback.format_exc() raise if responseInt == ERR_BAD_CREDENTIALS: response_data = {"errCode": ERR_BAD_CREDENTIALS} elif responseInt > 0: response_data = {"errCode": SUCCESS, "count": responseInt} else: raise Exception("Bad response from server!") return HttpResponse(json.dumps(response_data), content_type="application/json") else: raise Exception("Request must be a post!")
def add(request): try: if request.method == 'POST': request_data = json.loads(request.POST.keys()[0]) responseInt = UsersModel.add(**request_data) if responseInt in [ERR_USER_EXISTS, ERR_BAD_USERNAME, ERR_BAD_PASSWORD]: response_data = {'errCode' : responseInt} elif responseInt > 0: response_data = {'errCode' : SUCCESS, 'count' : responseInt} else: print responseInt, ' was the response int' raise Exception('Bad response from server!') return HttpResponse(json.dumps(response_data), content_type = "application/json") else: raise Exception('Request must be a post!') except: print traceback.format_exc()
def edit_author_page(author_id): """ Редактирование информации о писателе """ # проверка, авторизован ли пользователь if 'username' not in session: loged = False else: loged = True # ошибка, если такого автора нет в базе if not AuthorsModel(db.get_connection()).exists_id(str(author_id)): return render_template('error.html', loged=loged, title='Ошибка') books = BooksModel(db.get_connection()) book = [] author = AuthorsModel(db.get_connection()).get(author_id) books_author = author[4].split('//') for item in books_author: book.append(books.get_by_name(str(item))) if UsersModel(db.get_connection()).is_admin(session['username']): form = EditAuthorForm() if form.validate_on_submit(): if form.bio.data: AuthorsModel(db.get_connection()).edit_bio( author_id, form.bio.data) if form.picture.data is not None: filename = secure_filename(form.picture.data.filename) server_file = 'static/img/' + filename form.picture.data.save(server_file) AuthorsModel(db.get_connection()).edit_picture( author_id, filename) return redirect('author/' + str(author_id)) return render_template('edit_author.html', title='Редактирование', loged=loged, admin=True, form=form) return render_template('author_info.html', title=author[1], loged=loged, author=author, book=book, admin=False)
def sign_up(): data = request.get_json() password = Controller.bycrpt.generate_password_hash( data['password']).decode('utf-8') if UsersModel.find_by_login(data['login']): return Controller.format_response(errors=9, status_code=400) if UsersModel.find_by_email(data['email']): return Controller.format_response(errors=10, status_code=400) user = UsersModel(data['login'], data['name'], data['email'], data['birthday'], password) user.insert() return Controller.format_response(status_code=201)
def add_book(): """ Добавление книги """ # Ошибка, если пользователь не администратор или не зарегистрирован if 'username' not in session: return render_template('error.html', loged=False, title='Ошибка') if not UsersModel(db.get_connection()).is_admin(session['username']): return render_template('error.html', loged=False, title='Ошибка') form = AddBookForm() if form.validate_on_submit(): # создать книгу books = BooksModel(db.get_connection()) f = None all_books = BooksModel(db.get_connection()).get_all() for i in range(len(all_books)): if all_books[i][2] == form.author.data: f = all_books[i][0] if f: # добавить книгу в список произведений автора author = AuthorsModel(db.get_connection()).get_by_name( form.author.data) book_list = author[4] + '//' + form.name.data AuthorsModel(db.get_connection()).add_book(book_list, author[0]) if form.pictures.data is not None: filename = secure_filename(form.pictures.data.filename) server_file = 'static/img/' + filename form.pictures.data.save(server_file) books.insert(name=form.name.data, author=form.author.data, year=form.year.data, pages=form.pages.data, pictures=filename, bio=form.bio.data, stock=form.stock.data, price=form.price.data) # редирект на главную страницу return redirect('index') return render_template("add_book.html", title='Добавить книгу', form=form, loged=True)