fromflaskimportFlask,request,send_file,gimportsqlite3app=Flask(__name__)definit_db():db=sqlite3.connect('users.db')c=db.cursor()c.execute('''CREATE TABLE IF NOT EXISTS users (email TEXT, downloads INTEGER)''')c.close()db.commit()db.close()defget_db():db=getattr(g,'db',None)ifnotdb:db=g.db=sqlite3.connect('users.db')returndb@app.teardown_appcontextdefclose_connection(exception):db=getattr(g,'db',None)ifdb:db.close()@app.route('/')defindex():return''' <form method="POST" action="/register"> <label for="email">E-mail:</label> <input type="email" name="email" id="email"> </form> '''@app.route('/register',methods=['POST'])defregister():email=request.form['email']db=get_db()c=db.cursor()c.execute("INSERT INTO users VALUES ('{}', {})".format(email,0))db.commit()download_id=c.lastrowidc.close()return'<a href="/downloads?id={}">Download</a>'.format(download_id)@app.route('/downloads')defdownload():download_id=request.args['id']db=get_db()c=db.cursor()c.execute('SELECT * FROM users WHERE rowid=?',[download_id])res=c.fetchone()ifres:c.execute('UPDATE users SET downloads = downloads + 1 WHERE rowid=?',[download_id])db.commit()c.close()returnsend_file('foo.app',as_attachment=True)else:c.close()return'Sorry, download id invalid.'@app.route('/stats')defstats():c=get_db().cursor()c.execute('SELECT * FROM users')res=''foremail,dcountinc:res+='{}\t{}<br>'.format(email,dcount)c.close()returnresif__name__=="__main__":# init_db() # run once to create databaseapp.run()
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.