new: dev: create bookmark form
This commit is contained in:
parent
29b5c13743
commit
f53c2335d8
@ -1,7 +1,7 @@
|
|||||||
"""Forms module."""
|
"""Forms module."""
|
||||||
# pylint: disable=too-few-public-methods
|
# pylint: disable=too-few-public-methods, missing-docstring
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from wtforms import StringField, FieldList, BooleanField
|
from wtforms import StringField, FieldList, BooleanField, validators
|
||||||
|
|
||||||
|
|
||||||
class SearchBookmarksForm(FlaskForm):
|
class SearchBookmarksForm(FlaskForm):
|
||||||
@ -9,3 +9,10 @@ class SearchBookmarksForm(FlaskForm):
|
|||||||
all_keywords = BooleanField('Match all keywords')
|
all_keywords = BooleanField('Match all keywords')
|
||||||
deep = BooleanField('Deep search')
|
deep = BooleanField('Deep search')
|
||||||
regex = BooleanField('Regex')
|
regex = BooleanField('Regex')
|
||||||
|
|
||||||
|
|
||||||
|
class CreateBookmarksForm(FlaskForm):
|
||||||
|
url = StringField(validators=[validators.required(), validators.URL(require_tld=False)])
|
||||||
|
title = StringField()
|
||||||
|
tags = StringField()
|
||||||
|
description = StringField()
|
||||||
|
@ -1,15 +1,26 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
# pylint: disable=wrong-import-order, ungrouped-imports
|
||||||
"""Server module."""
|
"""Server module."""
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from buku import BukuDb
|
from buku import BukuDb
|
||||||
from flask import Flask, jsonify, request, render_template, current_app
|
|
||||||
from flask.cli import FlaskGroup
|
from flask.cli import FlaskGroup
|
||||||
from flask_api import status
|
from flask_api import status
|
||||||
from flask_bootstrap import Bootstrap
|
from flask_bootstrap import Bootstrap
|
||||||
from flask_paginate import Pagination, get_page_parameter, get_per_page_parameter
|
from flask_paginate import Pagination, get_page_parameter, get_per_page_parameter
|
||||||
|
from markupsafe import Markup
|
||||||
import click
|
import click
|
||||||
import flask
|
import flask
|
||||||
|
from flask import (
|
||||||
|
current_app,
|
||||||
|
flash,
|
||||||
|
Flask,
|
||||||
|
jsonify,
|
||||||
|
redirect,
|
||||||
|
render_template,
|
||||||
|
request,
|
||||||
|
url_for,
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from . import response, forms
|
from . import response, forms
|
||||||
@ -59,6 +70,7 @@ def bookmarks():
|
|||||||
default=int(
|
default=int(
|
||||||
current_app.config.get('BUKUSERVER_PER_PAGE', DEFAULT_PER_PAGE))
|
current_app.config.get('BUKUSERVER_PER_PAGE', DEFAULT_PER_PAGE))
|
||||||
)
|
)
|
||||||
|
create_bookmarks_form = forms.CreateBookmarksForm()
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
all_bookmarks = bukudb.get_rec_all()
|
all_bookmarks = bukudb.get_rec_all()
|
||||||
result = {
|
result = {
|
||||||
@ -100,17 +112,31 @@ def bookmarks():
|
|||||||
result=result,
|
result=result,
|
||||||
pagination=pagination,
|
pagination=pagination,
|
||||||
search_bookmarks_form=forms.SearchBookmarksForm(),
|
search_bookmarks_form=forms.SearchBookmarksForm(),
|
||||||
|
create_bookmarks_form=create_bookmarks_form,
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
|
url_data = create_bookmarks_form.url.data
|
||||||
result_flag = bukudb.add_rec(
|
result_flag = bukudb.add_rec(
|
||||||
request.form['url'], request.form['title'], request.form['tags'], request.form['description'])
|
url_data,
|
||||||
res = [
|
create_bookmarks_form.title.data,
|
||||||
jsonify(response.response_template['success']), status.HTTP_200_OK,
|
create_bookmarks_form.tags.data,
|
||||||
{'ContentType': 'application/json'}
|
create_bookmarks_form.description.data
|
||||||
] if result_flag else [
|
)
|
||||||
jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST,
|
if request.path.startswith('/api/'):
|
||||||
{'ContentType': 'application/json'}
|
res = [
|
||||||
]
|
jsonify(response.response_template['success']), status.HTTP_200_OK,
|
||||||
|
{'ContentType': 'application/json'}
|
||||||
|
] if result_flag != -1 else [
|
||||||
|
jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST,
|
||||||
|
{'ContentType': 'application/json'}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
bm_text = '[<a href="{0}">{0}</a>]'.format(url_data)
|
||||||
|
if result_flag != -1:
|
||||||
|
flash(Markup('Success creating bookmark {}.'.format(bm_text)), 'success')
|
||||||
|
else:
|
||||||
|
flash(Markup('Failed creating bookmark {}.'.format(bm_text)), 'danger')
|
||||||
|
return redirect(url_for('bookmarks-html'))
|
||||||
elif request.method == 'DELETE':
|
elif request.method == 'DELETE':
|
||||||
result_flag = bukudb.cleardb()
|
result_flag = bukudb.cleardb()
|
||||||
res = [
|
res = [
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block navbar %}
|
{% block navbar %}
|
||||||
|
{{super()}}
|
||||||
<nav class="navbar navbar-inverse navbar-fixed-top">
|
<nav class="navbar navbar-inverse navbar-fixed-top">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
@ -37,18 +38,19 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">{{show_flash_message()}}</div>
|
||||||
{%- with messages = get_flashed_messages(with_categories=True) %}
|
|
||||||
{%- if messages %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
{{utils.flashed_messages(messages)}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{%- endif %}
|
|
||||||
{%- endwith %}
|
|
||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
|
||||||
|
{% macro show_flash_message() %}
|
||||||
|
{%- with messages = get_flashed_messages(with_categories=True) %}
|
||||||
|
{%- if messages %}
|
||||||
|
{% for category, message in messages %}
|
||||||
|
<div class="alert alert-{{category}}">{{message}} </div>
|
||||||
|
{% endfor %}
|
||||||
|
{%- endif %}
|
||||||
|
{%- endwith %}
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
{% macro show_bookmarks(bookmarks) %}
|
{% macro show_bookmarks(bookmarks) %}
|
||||||
<table class="table" style="table-layout: fixed; width: 100%">
|
<table class="table" style="table-layout: fixed; width: 100%">
|
||||||
<caption>Bookmark table.</caption>
|
<caption>Bookmark table.</caption>
|
||||||
|
@ -2,10 +2,37 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div style="padding-top: 70px;">
|
<h1 style="padding-top: 70px;">Bookmarks</h1>
|
||||||
{{show_bookmarks_search_form()}}
|
{{show_flash_message()}}
|
||||||
|
<div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<h2> Search Bookmarks</h2>
|
||||||
|
{{show_bookmarks_search_form()}}
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<h2> Create Bookmarks</h2>
|
||||||
|
<form class="form-horizontal" action="{{url_for('bookmarks-html')}}" method="POST">
|
||||||
|
<div class="form-group">
|
||||||
|
{{create_bookmarks_form.url.label(class_="control-label col-sm-3")}}
|
||||||
|
{{create_bookmarks_form.url}}
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
{{create_bookmarks_form.title.label(class_="control-label col-sm-3")}}
|
||||||
|
{{create_bookmarks_form.title}}
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
{{create_bookmarks_form.tags.label(class_="control-label col-sm-3")}}
|
||||||
|
{{create_bookmarks_form.tags}}
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
{{create_bookmarks_form.description.label(class_="control-label col-sm-3")}}
|
||||||
|
{{create_bookmarks_form.description}}
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default">Create</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{show_bookmarks(result.bookmarks)}}
|
{{show_bookmarks(result.bookmarks)}}
|
||||||
{{pagination.links}}
|
{{pagination.links}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user