Skip to content

Instantly share code, notes, and snippets.

@MariaCarolinass
Last active July 17, 2020 04:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MariaCarolinass/f12a3d5f455fa870b4903da8703fe0c5 to your computer and use it in GitHub Desktop.
Save MariaCarolinass/f12a3d5f455fa870b4903da8703fe0c5 to your computer and use it in GitHub Desktop.
Exibir dados do campo de form autocomplete
<table>
<tr valign="top">
<td>
<h4>{{ similar.name }}</h4><br>
</td>
</tr>
</table>
#!/usr/bin/env python -*- coding: utf-8 -*-
from flask import request
from flask_wtf import FlaskForm
from wtforms import StringField, SelectField, TextField, TextAreaField, \
DateField, PasswordField, RadioField, BooleanField, SubmitField
from wtforms.validators import ValidationError, DataRequired, Length, \
Email, EqualTo, Regexp
from flask_babel import _, lazy_gettext as _l
from app.models import User, Post, Software, Similar, Tag, Category, \
Comment, Report
class PostForm(FlaskForm):
title = StringField(_l('Título'), validators=[DataRequired(),
Length(min=3)], render_kw={"placeholder": "Digite o título da fonte de dados"})
sphere = SelectField('Esfera', choices=[('Municipal', 'Municipal'),
('Estadual', 'Estadual'), ('Federal', 'Federal'),
('Internacional','Internacional')], validators=[DataRequired()])
description = TextAreaField(_l('Descrição'), validators=[DataRequired(),
Length(min=0, max=150)], render_kw={"placeholder": "Digite uma breve descrição sobre a fonte de dados"})
officialLink = StringField(_l('Link Oficial'), validators=[DataRequired('URL verificada!'),
Regexp('^(http|https):\/\/[\w.\-]+(\.[\w.\-]+)+.*$', 0,
'URL inválida. Use https:// no início da URL')],
render_kw={"placeholder": "Digite a URL da fonte de dados \
(https://www.exemplo.com/)"})
submit = SubmitField(_l('Registrar'))
class SoftwareForm(FlaskForm):
title = StringField(_l('Título'), validators=[DataRequired(),
Length(min=3)], render_kw={"placeholder": "Digite o título da aplicação"})
owner = StringField(_l('Proprietário:'), validators=[DataRequired(),
Length(min=3)], render_kw={"placeholder": "Digite o Link para contato"})
activeDevelopment = StringField(_l('Última atualização da aplicação'),
validators=[DataRequired()])
downloadLink = StringField(_l('Link para Download'),
validators=[DataRequired('URL verificada!'),
Regexp('^(http|https):\/\/[\w.\-]+(\.[\w.\-]+)+.*$', 0,
'URL inválida. Use https:// no início da URL')],
render_kw={"placeholder": "Digite a URL para Download da aplicação \
(https://www.exemplo.com/)"})
dateCreation = StringField(_l('Data de Criação'), validators=[DataRequired()])
description = TextAreaField(_l('Descrição'), validators=[DataRequired(),
Length(min=0, max=150)], render_kw={"placeholder": "Digite uma breve descrição sobre a aplicação"})
submit = SubmitField(_l('Enviar'))
class SimilarForm(FlaskForm):
name = StringField(_l('Semelhante:'), id='autocomplete', validators=[DataRequired(),
Length(min=0, max=100)], render_kw={"placeholder": "Digite o nome de um título.."})
submit = SubmitField(_l('Registrar'))
from datetime import datetime
from hashlib import md5
from time import time
from flask import current_app
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
import jwt
from app import db, login
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), index=True, unique=True)
sphere = db.Column(db.String(200), index=True)
description = db.Column(db.String(800), index=True)
officialLink = db.Column(db.String(300), index=True)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
similar = db.relationship('Similar', backref='similar_post', lazy='dynamic')
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __repr__(self):
return '<Post {}>'.format(self.title)
def as_dict(self):
return {'title': self.title}
class Software(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), index=True, unique=True)
description = db.Column(db.String(800), index=True)
downloadLink = db.Column(db.String(300), index=True)
activeDevelopment = db.Column(db.String(200), index=True)
owner = db.Column(db.String(200), index=True)
dateCreation = db.Column(db.String(300), index=True)
dateRelease = db.Column(db.String(300), index=True)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
similar = db.relationship('Similar', backref='similar_software', lazy='dynamic')
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __repr__(self):
return '<Software {}>'.format(self.title)
def as_dict(self):
return {'title': self.title}
class Similar(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(200), index=True)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
postSimilar_id = db.Column(db.Integer, db.ForeignKey('post.id'))
softwareSimilar_id = db.Column(db.Integer, db.ForeignKey('software.id'))
def __repr__(self):
return '<Similar {}>'.format(self.name)
{% extends "base.html" %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block app_content %}
<h1>{{ post.title }}</h1><br>
<h2>Você também pode se interessar em: </h2><br>
{% for similar in similares %}
{% include '_similar.html' %}<br>
{% endfor %}
<br><br>
<p>Formulário para semelhantes:</p>
<div class="row">
<div class="col-md-6">
{{ wtf.quick_form(form) }}
</div>
</div>
<br><br>
{% if prev_url %}
<a href="{{ prev_url }}">Mais recentes</a>
{% endif %}
{% if next_url %}
<a href="{{ next_url }}">Mais antigas</a>
{% endif %}
{% endblock %}
#!/usr/bin/env python# -*- coding: utf-8 -*-
import sys
from datetime import datetime
from flask import render_template, flash, redirect, url_for, request, g, \
jsonify, current_app, Response
import json
from flask_login import current_user, login_required
from flask_babel import _, get_locale
from guess_language import guess_language
from app import db
from app.main.form import EditProfileForm, PostForm, SoftwareForm, \
SimilarForm, TagForm, CategoryForm, CommentForm, ReportForm
from app.models import User, Post, Software, Similar, Tag, Category, \
Comment, Report
from app.main import bp
@bp.route('/_autocomplete', methods=['GET'])
def autocomplete():
res1 = Software.query.all()
res2 = Post.query.all()
list_titles1 = [r.as_dict() for r in res1]
list_titles2 = [r.as_dict() for r in res2]
return jsonify(list_titles1 + list_titles2)
@bp.route('/post/<title>', methods=['GET', 'POST'])
def post(title):
post = Post.query.filter_by(title=title).first_or_404()
page = request.args.get('page', 1, type=int)
posts = Post.query.order_by(Post.timestamp.desc()).all()
posts = Post.query.order_by(Post.timestamp.desc()).paginate(
page, current_app.config['POSTS_PER_PAGE'], False)
next_url = url_for('main.post', page=posts.next_num) \
@bp.route('/software/<title>', methods=['GET', 'POST'])
def software(title):
software = Software.query.filter_by(title=title).first_or_404()
page = request.args.get('page', 1, type=int)
softwares = Software.query.order_by(Software.timestamp.desc()).paginate(
page, current_app.config['SOFTWARES_PER_PAGE'], False)
next_url = url_for('main.software', page=softwares.next_num) \
if softwares.has_next else None
prev_url = url_for('main.software', page=softwares.prev_num) \
if softwares.has_prev else None
form = SimilarForm(request.form)
if form.validate_on_submit():
similar = Similar(name=form.name.data, softwareSimilar_id=software.id)
db.session.add(similar)
db.session.commit()
flash(_('Você registrou uma nova opção de semelhante'))
similar_software = Similar.query.filter_by(softwareSimilar_id=software.id).first_or_404()
page = request.args.get('page', 1, type=int)
similares = Similar.query.order_by(Similar.timestamp.desc()).paginate(
page, current_app.config['SIMILARES_PER_PAGE'], False)
next_url = url_for('main.post', page=similares.next_num) \
if similares.has_next else None
prev_url = url_for('main.post', page=similares.prev_num) \
if similares.has_prev else None
return render_template('software.html', software=software, form=form,
similar_software=similar_software, similares=similares.items,
softwares=softwares.items, next_url=next_url, prev_url=prev_url)
@bp.route('/register_source', methods=['GET', 'POST'])
def register_source():
form = PostForm()
if form.validate_on_submit():
sources = Post(title=form.title.data,
description=form.description.data, sphere=form.sphere.data,
officialLink=form.officialLink.data, author=current_user)
db.session.add(sources)
db.session.commit()
flash(_('Parabéns, você acabou de registrar uma fonte de dados!'))
return redirect(url_for('main.index'))
return render_template('register_source.html', title=(_('Cadastrar Fonte')), form=form)
@bp.route('/register_software', methods=['GET', 'POST'])
def register_software():
form = SoftwareForm()
if form.validate_on_submit():
software = Software(title=form.title.data,
description=form.description.data,
downloadLink=form.downloadLink.data,
activeDevelopment=form.activeDevelopment.data,
owner=form.owner.data,
dateCreation=form.dateCreation.data, author=current_user)
db.session.add(software)
db.session.commit()
flash(_('Parabéns, você acabou de registrar um software de dados!'))
return redirect(url_for('main.index'))
return render_template('register_software.html', title=(_('Cadastrar Software')), form=form)
{% extends "base.html" %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block app_content %}
<h1>{{ software.title }}</h1>
<h2>Você também pode se interessar em: </h2><br>
{% for similar in similares %}
{% include '_similar.html' %}<br>
{% endfor %}
<br><br>
<p>Formulário para semelhantes:</p>
<div class="row">
<div class="col-md-6">
{{ wtf.quick_form(form) }}
</div>
</div>
<br><br>
{% if prev_url %}
<a href="{{ prev_url }}">Mais recentes</a>
{% endif %}
{% if next_url %}
<a href="{{ next_url }}">Mais antigas</a>
{% endif %}
{% endblock %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment