when i run my python/flask program i get click able URL\'s in the console output
ID: 3871868 • Letter: W
Question
when i run my python/flask program i get click able URL's in the console output. I am trying to figure out why? Do i have a pycharm plugin installed or is it my source code somewhere??
see code and picture below
PYTHON/flask code here
#!/usr/bin/env python
# Based on: http://stackoverflow.com/questions/26057710/datepickerwidget-with-flask-flask-admin-and-wtforms
# Time picker stuff from: https://wtforms-components.readthedocs.io/en/latest/
import os
from datetime import datetime
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms.fields.html5 import DateField
from wtforms_components import TimeField
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
app = Flask(__name__)
app.secret_key = 'SHH!'
# db class
class DataBase(object):
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
def __init__(self, db_url=SQLALCHEMY_DATABASE_URI):
self.engine = create_engine(db_url, convert_unicode=True)
self.db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=self.engine))
self.Base = declarative_base()
self.Base.query = self.db_session.query_property()
def init_db(self):
""" Create the database with all tables """
self.Base.metadata.create_all(bind=self.engine)
def fill_db(self):
"""Fill the database with test data"""
if not Image.query.all():
self.db_session.add(Image(
name='96-20170217202336-05',
date_time=datetime.strptime('20170217202336', '%Y%m%d%H%M%S')))
self.db_session.add(Image(
name='98-20170217202523-04',
date_time=datetime.strptime('20170217202523', '%Y%m%d%H%M%S')))
self.db_session.add(Image(
name='99-20170217202539-05',
date_time=datetime.strptime('20170217202539', '%Y%m%d%H%M%S')))
self.db_session.commit()
db = DataBase()
# model
class Image(db.Base):
""" Model for table Images """
__tablename__ = 'Images'
id = Column(Integer, index=True, primary_key=True, autoincrement=True)
name = Column(String(128))
date_time = Column(DateTime, default=datetime.now())
def __init__(self, name, date_time):
self.name = name
self.date_time = date_time
db.init_db()
db.fill_db()
class ExampleForm(FlaskForm):
dt_from = DateField('DatePicker', format='%Y-%m-%d')
tm_from = TimeField('TimePicker')
dt_to = DateField('DatePicker', format='%Y-%m-%d')
tm_to = TimeField('TimePicker')
@app.route('/', methods=['POST', 'GET'])
def hello_world():
form = ExampleForm()
if form.validate_on_submit():
start = ' '.join([request.form['dt_from'], request.form['tm_from']])
end = ' '.join([request.form['dt_to'], request.form['tm_to']])
result = Image.query.filter(
Image.date_time <= end).filter(Image.date_time >= start)
return render_template('date_picker.html',
form=form,
images_list=list(result))
return render_template('date_picker.html', form=form, images_list=False)
if __name__ == '__main__':
# app.run(host='192.168.33.10', port=8080, debug=True)
app.run(debug=True)
File templates/date-picker.html:
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Date Selection</h2>
<form action="#" method="post">
<label> Date from:
{{ form.dt_from(class='datepicker') }}
{{ form.tm_from( ) }}
</label>
<label>Date to:
{{ form.dt_to(class='datepicker') }}
{{ form.tm_to( ) }}
</label>
{{ form.hidden_tag() }}
<input type="submit"/>
</form>
{% if images_list %}
<h2>Files that were found:</h2>
<table class="table">
<thead>
<tr>
<th>Date&time</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{% for image in images_list %}
<tr>
<td>{{ image.date_time }}</td>
<td>{{ image.name }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
</body>
</html>
Explanation / Answer
#!/usr/bin/env python
# Based on: http://stackoverflow.com/questions/26057710/datepickerwidget-with-flask-flask-admin-and-wtforms
# Time picker stuff from: https://wtforms-components.readthedocs.io/en/latest/
import os
from datetime import datetime
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms.fields.html5 import DateField
from wtforms_components import TimeField
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
app = Flask(__name__)
app.secret_key = 'SHH!'
# db class
class DataBase(object):
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
def __init__(self, db_url=SQLALCHEMY_DATABASE_URI):
self.engine = create_engine(db_url, convert_unicode=True)
self.db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=self.engine))
self.Base = declarative_base()
self.Base.query = self.db_session.query_property()
def init_db(self):
""" Create the database with all tables """
self.Base.metadata.create_all(bind=self.engine)
def fill_db(self):
"""Fill the database with test data"""
if not Image.query.all():
self.db_session.add(Image(
name='96-20170217202336-05',
date_time=datetime.strptime('20170217202336', '%Y%m%d%H%M%S')))
self.db_session.add(Image(
name='98-20170217202523-04',
date_time=datetime.strptime('20170217202523', '%Y%m%d%H%M%S')))
self.db_session.add(Image(
name='99-20170217202539-05',
date_time=datetime.strptime('20170217202539', '%Y%m%d%H%M%S')))
self.db_session.commit()
db = DataBase()
# model
class Image(db.Base):
""" Model for table Images """
__tablename__ = 'Images'
id = Column(Integer, index=True, primary_key=True, autoincrement=True)
name = Column(String(128))
date_time = Column(DateTime, default=datetime.now())
def __init__(self, name, date_time):
self.name = name
self.date_time = date_time
db.init_db()
db.fill_db()
class ExampleForm(FlaskForm):
dt_from = DateField('DatePicker', format='%Y-%m-%d')
tm_from = TimeField('TimePicker')
dt_to = DateField('DatePicker', format='%Y-%m-%d')
tm_to = TimeField('TimePicker')
@app.route('/', methods=['POST', 'GET'])
def hello_world():
form = ExampleForm()
if form.validate_on_submit():
start = ' '.join([request.form['dt_from'], request.form['tm_from']])
end = ' '.join([request.form['dt_to'], request.form['tm_to']])
result = Image.query.filter(
Image.date_time <= end).filter(Image.date_time >= start)
return render_template('date_picker.html',
form=form,
images_list=list(result))
return render_template('date_picker.html', form=form, images_list=False)
if __name__ == '__main__':
# app.run(host='192.168.33.10', port=8080, debug=True)
app.run(debug=True)
File templates/date-picker.html:
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Date Selection</h2>
<form action="#" method="post">
<label> Date from:
{{ form.dt_from(class='datepicker') }}
{{ form.tm_from( ) }}
</label>
<label>Date to:
{{ form.dt_to(class='datepicker') }}
{{ form.tm_to( ) }}
</label>
{{ form.hidden_tag() }}
<input type="submit"/>
</form>
{% if images_list %}
<h2>Files that were found:</h2>
<table class="table">
<thead>
<tr>
<th>Date&time</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{% for image in images_list %}
<tr>
<td>{{ image.date_time }}</td>
<td>{{ image.name }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
</body>
</html>
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.