18.8.3 Initial Schemas
Relational databases need schemas, so applications often ship a schema.sql file that
creates the database. It’s a good idea to provide a function that creates the database
based on that schema. This function can dothat for you:
def init_db():
with app.app_context():
db = get_db()
with app.open_resource(schema.sql, mode=r) as f:
db.cursor().executescript(f.read())
db.commit()
Youcan then create such a databasefrom the python shell:
>>> from yourapplication import init_db
>>> init_db()
18.9 SQLAlchemy in Flask
Many people preferSQLAlchemy for database access. In this case it’s encouraged to
use apackageinstead of amodulefor your flaskapplication anddropthe models into
aseparate module (Larger Applications). While that is not necessary, it makes a lot of
sense.
There are four very common ways to use SQLAlchemy. I will outline each of them
here:
18.9.1 Flask-SQLAlchemy Extension
Because SQLAlchemy is a common database abstraction layer and object relational
mapper that requires a little bit of configuration effort, there is a Flask extension that
handlesthat for you. This is recommended if you want toget started quickly.
Youcan downloadFlask-SQLAlchemy fromPyPI.
18.9.2 Declarative
The declarative extension in SQLAlchemy is the most recent method of using
SQLAlchemy. It allows you to define tables and models in one go, similar to how
Django works. In addition to the following text I recommend the official documenta-
tion on thedeclarativeextension.
Here the exampledatabase.py module for your application:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
121
Pdf form data extraction - extract form data from PDF in C#.net, ASP.NET, MVC, Ajax, WPF
Help to Read and Extract Field Data from PDF with a Convenient C# Solution
collect data from pdf forms; extracting data from pdf to excel
Pdf form data extraction - VB.NET PDF Form Data Read library: extract form data from PDF in vb.net, ASP.NET, MVC, Ajax, WPF
Convenient VB.NET Solution to Read and Extract Field Data from PDF
how to save editable pdf form in reader; c# read pdf form fields
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine(sqlite:////tmp/test.db, convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
def init_db():
# import all modules here that might define models so that
# they will be registered properly on the metadata. Otherwise
# you will have to import them first before calling init_db()
import yourapplication.models
Base.metadata.create_all(bind=engine)
To define your models, just subclass the Base class that was createdby the code above.
If youare wondering whywe don’t havetocareabout threads here (like wedidin the
SQLite3 example above with the g object): that’s because SQLAlchemy does that for
usalready with the scoped_session.
To use SQLAlchemy in a declarative way with your application, you just have to put
the following code into your application module. Flask will automatically remove
database sessionsat the end of therequest or when the application shutsdown:
from yourapplication.database import db_session
@app.teardown_appcontext
def shutdown_session(exception=None):
db_session.remove()
Here is an example model (put this into models.py, e.g.):
from sqlalchemy import Column, Integer, , String
from yourapplication.database import Base
class User(Base):
__tablename__ users
id Column(Integer, primary_key=True)
name = Column(String(50), unique=True)
email = Column(String(120), unique=True)
def __init__(self, name=None, email=None):
self.name name
self.email email
def __repr__(self):
return <User %r>  (self.name)
To create the database you can use theinit_db function:
122
VB.NET PDF Text Extract Library: extract text content from PDF
control provides text extraction from PDF images and image files. Enable extracting PDF text to another PDF file, and other formats such as TXT and SVG form.
exporting pdf form to excel; extracting data from pdf forms
C# PDF Text Extract Library: extract text content from PDF file in
Image text extraction control provides text extraction from PDF images and image files. Best C#.NET PDF text extraction library and component for free download.
sign pdf form reader; pdf form field recognition
>>> from yourapplication.database import init_db
>>> init_db()
Youcan insert entries into the database like this:
>>> from yourapplication.database import db_session
>>> from yourapplication.models import User
>>> User(adminadmin@localhost)
>>> db_session.add(u)
>>> db_session.commit()
Querying is simpleas well:
>>> User.query.all()
[<User uadmin>]
>>> User.query.filter(User.name == admin).first()
<User uadmin>
18.9.3 Manual Object Relational Mapping
Manual object relational mapping has a few upsides and a few downsides versus the
declarative approach from above. The main difference is that you define tables and
classes separately and map them together. It’s more flexible but a little more to type.
In general it works like the declarative approach, so make sure to also split up your
application into multiple modules in a package.
Here is an example database.py modulefor your application:
from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import scoped_session, sessionmaker
engine = create_engine(sqlite:////tmp/test.db, convert_unicode=True)
metadata = MetaData()
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
def init_db():
metadata.create_all(bind=engine)
As for the declarative approach you need to close the session after each request or
application context shutdown. Put this intoyour application module:
from yourapplication.database import db_session
@app.teardown_appcontext
def shutdown_session(exception=None):
db_session.remove()
Here is an example tableand model (put thisintomodels.py):
123
VB.NET PDF Image Extract Library: Select, copy, paste PDF images
image extraction from multiple page adobe PDF file in VB.NET. Extract multiple types of image from PDF file in VB.NET, like XObject Image, XObject Form, Inline
using pdf forms to collect data; how to extract data from pdf to excel
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
Support PDF Image Extraction from a Page, a Region on a Page Extract various types of image from PDF file, like XObject Image, XObject Form, Inline Image
online form pdf output; make pdf form editable in reader
from sqlalchemy import Table, Column, Integer, , String
from sqlalchemy.orm import mapper
from yourapplication.database import metadata, db_session
class User(object):
query = db_session.query_property()
def __init__(self, name=None, email=None):
self.name name
self.email email
def __repr__(self):
return <User %r>  (self.name)
users = Table(users, metadata,
Column(id, Integer, primary_key=True),
Column(name, String(50), unique=True),
Column(email, String(120), unique=True)
)
mapper(User, users)
Querying and inserting works exactly the sameas in the example above.
18.9.4 SQL Abstraction Layer
If you just want to use the database system (and SQL) abstraction layer you basically
onlyneed the engine:
from sqlalchemy import create_engine, MetaData
engine = create_engine(sqlite:////tmp/test.db, convert_unicode=True)
metadata = MetaData(bind=engine)
Then you can either declare the tables in your code like in the examples above, or
automatically load them:
users = Table(users, metadata, autoload=True)
To insert data you can use the insert method. We have to get a connection first so that
we can usea transaction:
>>> con engine.connect()
>>> con.execute(users.insert(), name=admin, email=admin@localhost)
SQLAlchemy will automatically commit for us.
To query your database, you use the enginedirectly or use a connection:
>>> users.select(users.c.id == 1).execute().first()
(1, uadmin, uadmin@localhost)
124
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
VB.NET PDF - PDF File Pages Extraction Guide. Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc. Free PDF document
pdf data extraction open source; change font size pdf form reader
VB.NET PDF Library SDK to view, edit, convert, process PDF file
PDF Text Extraction. Mature and robust APIs are provided for programmers to integrate and perform PDF text extraction feature in .NET windows and web project.
edit pdf form in reader; save pdf forms in reader
These results arealsodict-like tuples:
>>> users.select(users.c.id == 1).execute().first()
>>> r[name]
uadmin
Youcan also pass strings of SQLstatements to the execute() method:
>>> engine.execute(select * * from m users s where id d = = :1, [1]).first()
(1, uadmin, uadmin@localhost)
For moreinformation about SQLAlchemy, head over to thewebsite.
18.10 Uploading Files
Ah yes, the good old problem of fileuploads. The basic idea of file uploadsis actually
quite simple. It basically works like this:
1. A <form> tag is marked with enctype=multipart/form-data and an <input
type=file> is placed in that form.
2. The application accesses the file from the files dictionary on the request object.
3. use thesave() methodof thefileto savethefilepermanently somewhere on the
filesystem.
18.10.1 A Gentle Introduction
Let’s start with a very basic application that uploads a file to a specific upload folder
and displaysa filetothe user. Let’slook atthebootstrappingcodefor our application:
import os
from flask import Flask, request, , redirect, , url_for
from werkzeug import secure_filename
UPLOAD_FOLDER /path/to/the/uploads
ALLOWED_EXTENSIONS set([txtpdfpngjpgjpeggif])
app = Flask(__name__)
app.config[UPLOAD_FOLDER= UPLOAD_FOLDER
So first we need a couple of imports. Most should be straightforward, the
werkzeug.secure_filename() is explained a little bit later. The UPLOAD_FOLDER
is where we will store theuploaded files and the ALLOWED_EXTENSIONS is the set
of allowed file extensions. Then we add a URL rule by hand to the application. Now
usually we’re not doing that,so why here? Thereasonsisthat we want thewebserver
(or our development server) to serve these files for us and so we only need a rule to
generatethe URLtothese files.
125
C# PDF File Permission Library: add, remove, update PDF file
Data. Data: Auto Fill-in Field Data. Field: Insert Choose to offer PDF annotation and content extraction Enable or disable copying and form filling functions.
extract data from pdf form; exporting data from pdf to excel
VB.NET PDF File Permission Library: add, remove, update PDF file
Data. Data: Auto Fill-in Field Data. Field: Insert Choose to offer PDF annotation and content extraction Enable or disable copying and form filling functions.
how to fill in a pdf form in reader; how to fill pdf form in reader
Why do welimit the extensionsthat areallowed? Youprobablydon’t want your users
tobeabletouploadeverythingthereiftheserver isdirectly sendingout thedatatothe
client. That way you can make sure that users arenot able to upload HTML files that
would causeXSS problems(see Cross-Site Scripting (XSS)).Also makesure todisallow
.php filesif the server executes them, but whohasPHPinstalled on his server, right? :)
Next the functions that check if an extension is valid and that uploads the file and
redirects the user to the URL for theuploaded file:
def allowed_file(filename):
return . in filename and \
filename.rsplit(.1)[1in ALLOWED_EXTENSIONS
@app.route(/, methods=[GETPOST])
def upload_file():
if request.method == POST:
file request.files[file]
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config[UPLOAD_FOLDER], filename))
return redirect(url_for(uploaded_file,
filename=filename))
return 
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form action="" method=post enctype=multipart/form-data>
<p><input type=file name=file>
<input type=submit value=Upload>
</form>

So what does thatsecure_filename() function actually do? Now the problem is that
there is that principle called “never trust user input”. This isalsotrue for the filename
of an uploaded file. All submitted form data can beforged, andfilenames can bedan-
gerous. For the moment just remember: always use that function to secure a filename
before storing it directlyon thefilesystem.
Information for the Pros
So you’reinterestedin what thatsecure_filename()function doesandwhat theprob-
lem isif you’renot usingit? So just imaginesomeone wouldsend the followinginfor-
mation as filename to your application:
filename "../../../../home/username/.bashrc"
Assuming the number of ../ is correct and you would join this with the UP-
LOAD_FOLDER theuser might havetheabilityto modifya fileon the server’sfilesys-
tem he or she should not modify. This does require some knowledge about how the
application looks like, but trust me, hackers arepatient :)
Now let’s look how that function works:
126
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Merge Microsoft Office Word, Excel and PowerPoint data to PDF form. PDF page deleting, PDF document splitting, PDF page reordering and PDF page image and
extract pdf form data to excel; extracting data from pdf files
VB.NET PDF Password Library: add, remove, edit PDF file password
passwordSetting.IsAnnot = True ' Allow to fill form. passwordSetting.IsFillForm = True ' Content extraction is allowed. True ' Add password to PDF file.
extracting data from pdf forms to excel; export pdf form data to excel
>>> secure_filename(../../../../home/username/.bashrc)
home_username_.bashrc
Now one last thing is missing: the serving of the uploaded files. As of Flask 0.5 we
can usea function that does that for us:
from flask import send_from_directory
@app.route(/uploads/<filename>)
def uploaded_file(filename):
return send_from_directory(app.config[UPLOAD_FOLDER],
filename)
Alternatively you can register uploaded_file as build_only rule and use the
SharedDataMiddleware.ThisalsoworkswitholderversionsofFlask:
from werkzeug import SharedDataMiddleware
app.add_url_rule(/uploads/<filename>uploaded_file,
build_only=True)
app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
/uploads: app.config[UPLOAD_FOLDER]
})
If you now run theapplication everything should work as expected.
18.10.2 Improving Uploads
New in version 0.6.
So how exactly does Flask handle uploads? Well it will store them in the webserver’s
memoryifthefilesarereasonablesmallotherwiseina temporary location (asreturned
bytempfile.gettempdir()). But how do you specify the maximum file size after
which anuploadisaborted? BydefaultFlaskwillhappilyacceptfileuploadstoan un-
limited amount of memory, but you can limit that by setting the MAX_CONTENT_LENGTH
config key:
from flask import Flask, Request
app = Flask(__name__)
app.config[MAX_CONTENT_LENGTH16 1024 1024
The code above will limited the maximum allowed payload to 16 megabytes. If a
larger fileis transmitted, Flask will raiseanRequestEntityTooLarge exception.
This feature was added in Flask 0.6 but can be achieved in older versions as well by
subclassing the request object. For more information on that consult the Werkzeug
documentation on file handling.
127
18.10.3 Upload Progress Bars
Awhile ago many developers had the idea to read the incoming file in small chunks
and store the upload progress in the database to be able to poll the progress with
JavaScript from the client. Long story short: theclient asksthe server every 5 seconds
how much it has transmitted already. Do you realize the irony? The client is asking
for something it shouldalready know.
Now therearebettersolutionsto that work faster and more reliable. The webchanged
alot lately and youcan useHTML5, Java, Silverlight or Flash toget a nicer uploading
experience on the client side. Look at the following libraries for some nice examples
how to do that:
• Plupload - HTML5, Java, Flash
• SWFUpload - Flash
• JumpLoader - Java
18.10.4 An Easier Solution
Because the common pattern for file uploads exists almost unchanged in all applica-
tionsdealing with uploads,thereis a Flaskextension calledFlask-Uploadsthat imple-
ments a full fledged upload mechanism with white and blacklisting of extensions and
more.
18.11 Caching
When your application runs slow, throw some caches in. Well, at least it’s the easiest
way to speed up things. What does a cache do? Say you have a function that takes
sometime to complete but the results would stillbe good enough if they were 5 min-
utes old. So then the idea is that you actually put the result of that calculation into a
cache for sometime.
Flask itself does not provide caching for you, but Werkzeug, one of the libraries it is
based on, has some very basic cache support. It supports multiple cache backends,
normallyyou want tousea memcached server.
18.11.1 Setting up a Cache
You create a cache object once and keep it around, similar to how Flask objects are
created. If you are using the development server youcan create aSimpleCache object,
that one is a simple cache that keeps the item stored in the memory of the Python
interpreter:
from werkzeug.contrib.cache import SimpleCache
cache = SimpleCache()
128
If you want to use memcached, make sure to have one of the memcache modules
supported (you get them fromPyPI) and a memcached server running somewhere.
Thisis how youconnect tosuch an memcached server then:
from werkzeug.contrib.cache import MemcachedCache
cache = MemcachedCache([127.0.0.1:11211])
If you are using App Engine, you can connect to the App Engine memcache server
easily:
from werkzeug.contrib.cache import GAEMemcachedCache
cache = GAEMemcachedCache()
18.11.2 Using a Cache
Now how can one use such a cache? There are two very important operations:get()
andset(). This is how to use them:
To get an item from the cache callget() with a string as key name. If something is in
the cache, it isreturned. Otherwise that function will return None:
rv = cache.get(my-item)
To add items to the cache, use theset() method instead. The first argument is the
key and the second thevaluethat should beset. Also a timeout can be provided after
which the cache will automaticallyremoveitem.
Here afull examplehow this looks like normally:
def get_my_item():
rv = cache.get(my-item)
if rv is None:
rv = calculate_value()
cache.set(my-item, rv, timeout=60)
return rv
18.12 View Decorators
Python has a really interesting feature called function decorators. This allow some
really neat things for web applications. Because each view in Flask is a function dec-
orators can be used to inject additional functionality to one or more functions. The
route() decorator is the one you probably used already. But there are use cases for
implementingyour own decorator. For instance,imagineyou havea view that should
onlybeused by peoplethat areloggedinto. Ifa user goes tothesiteandisnot logged
in, they should be redirected to the login page. This is a good example of a use case
where a decorator is an excellent solution.
129
18.12.1 Login Required Decorator
So let’s implement such a decorator. A decorator is a function that returnsa function.
Pretty simple actually. The only thing you have to keep in mind when implementing
something like this is to update the __name__, __module__ and some other attributes
of a function. This isoften forgotten, but you don’t have to do that by hand, thereis a
function for that that is used likea decorator (functools.wraps()).
This example assumes that the login page is called ’login’ and that the current user
isstoredas g.user and None if there is no-one loggedin:
from functools import wraps
from flask import g, request, , redirect, , url_for
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if g.user is None:
return redirect(url_for(login, next=request.url))
return f(*args, **kwargs)
return decorated_function
So how would you use that decorator now? Apply it as innermost decorator to a
view function. When applying further decorators, always remember that the route()
decorator is the outermost:
@app.route(/secret_page)
@login_required
def secret_page():
pass
18.12.2 Caching Decorator
Imagine you have a view function that does an expensive calculation and because
of that you would like to cache the generated results for a certain amount of time.
Adecorator would be nice for that. We’re assuming you have set up a cache like
mentioned in Caching.
Here an example cache function. It generates the cache key from a specific prefix (ac-
tually a format string) and the current path of therequest. Notice that we are using a
function that first creates the decorator that then decorates the function. Sounds aw-
ful? Unfortunately it is a little bit more complex, but the codeshould still be straight-
forwardtoread.
The decorated function will then workas follows
1. get the uniquecachekey for thecurrent request baseon thecurrent path.
2. get the value for that key from the cache. If the cache returned something we
willreturn that value.
130
Documents you may be interested
Documents you may be interested