Oct-23-2018, 01:00 PM
I am developing a basic crud operation type site. I am able to add the elements into DB by clicking submit in the form but the redirecting to the table format is not occurring. My code is at https://github.com/iamjhamukesh/Testing and every time I submit the form(localhost:5000/new_user), I get internal server error in the browser. The error in terminal is :
I think the problem is in tables.py and main.py. Can anyone please guide me where I am going wrong ?
tables.py:
main.py:
users.html:
I think the problem is in these 3 files but the other respective html files can be found on above mentioned github link (edit.html,add.html)
1 2 3 4 5 6 7 8 9 10 11 12 |
'dict' object has no attribute 'user_symbol' [ 2018 - 10 - 23 18 : 06 : 20 , 557 ] ERROR in app: Exception on / [GET] Traceback (most recent call last): File "/home/mukesh/.local/lib/python2.7/site-packages/flask/app.py" , line 2292 , in wsgi_app response = self .full_dispatch_request() File "/home/mukesh/.local/lib/python2.7/site-packages/flask/app.py" , line 1816 , in full_dispatch_request return self .finalize_request(rv) File "/home/mukesh/.local/lib/python2.7/site-packages/flask/app.py" , line 1831 , in finalize_request response = self .make_response(rv) File "/home/mukesh/.local/lib/python2.7/site-packages/flask/app.py" , line 1957 , in make_response 'The view function did not return a valid response. The' TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement. |
tables.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from flask_table import Table, Col, LinkCol class Results(Table): user_id = Col( 'Id' , show = False ) user_symbol = Col( 'Symbol' ) user_date = Col( 'Date' ) user_high = Col( 'High' ) user_low = Col( 'Low' ) user_volume = Col( 'Volume' ) user_open = Col( 'Open' ) user_close = Col( 'Close' ) #user_password = Col('Password', show=False) edit = LinkCol( 'Edit' , 'edit_view' , url_kwargs = dict ( id = 'user_id' )) delete = LinkCol( 'Delete' , 'delete_user' , url_kwargs = dict ( id = 'user_id' )) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
import pymysql from app import app from tables import Results from db_config import mysql from flask import flash, render_template, request, redirect from werkzeug import generate_password_hash, check_password_hash from contextlib import closing ''' CREATE TABLE `bse` ( `user_id` bigint(20) NOT NULL AUTO_INCREMENT, symbol varchar(50),date1 varchar(15),high varchar(10),low varchar(10),volume varchar(10),open varchar(10),close varchar(10), PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ''' @app .route( '/new_user' ) def add_user_view(): return render_template( 'add.html' ) @app .route( '/add' , methods = [ 'POST' ]) def add_user(): try : #_name = request.form['inputName'] #_email = request.form['inputEmail'] #_password = request.form['inputPassword'] _symbol = request.form[ 'inputsymbol' ] _date = request.form[ 'inputdate' ] _high = request.form[ 'inputhigh' ] _low = request.form[ 'inputlow' ] _volume = request.form[ 'inputvolume' ] _open = request.form[ 'inputopen' ] _close = request.form[ 'inputclose' ] # validate the received values if _symbol and _date and _high and _low and _volume and _open and _close and request.method = = 'POST' : #do not save password as a plain text #_hashed_password = generate_password_hash(_password) # save edits sql = "INSERT INTO bse(symbol,date1,high,low,volume,open,close) VALUES(%s, %s, %s, %s, %s, %s, %s)" #data = (_name, _email, _hashed_password,) data = (_symbol,_date,_high,_low,_volume,_open,_close) conn = mysql.connect() cursor = conn.cursor() cursor.execute(sql, data) conn.commit() flash( 'Data added successfully!' ) return redirect( '/' ) else : return 'Error while adding user' except Exception as e: print (e) finally : cursor.close() conn.close() @app .route( '/' ) def users(): try : #with closing(mysql.connect()) as conn: # with closing(conn.cursor()) as cursor: conn = mysql.connect() cursor = conn.cursor(pymysql.cursors.DictCursor) cursor.execute( "SELECT * FROM bse" ) rows = cursor.fetchall() table = Results(rows) table.border = True return render_template( 'users.html' , table = table) except Exception as e: print (e) finally : cursor.close() conn.close() @app .route( '/edit/<int:id>' ) def edit_view( id ): try : conn = mysql.connect() cursor = conn.cursor(pymysql.cursors.DictCursor) cursor.execute( "SELECT * FROM bse WHERE user_id=%s" , id ) row = cursor.fetchone() if row: return render_template( 'edit.html' , row = row) else : return 'Error loading #{id}' . format ( id = id ) except Exception as e: print (e) finally : cursor.close() conn.close() @app .route( '/update' , methods = [ 'POST' ]) def update_user(): try : #_name = request.form['inputName'] #_email = request.form['inputEmail'] #_password = request.form['inputPassword'] _symbol = request.form[ 'inputsymbol' ] _date = request.form[ 'inputdate' ] _high = request.form[ 'inputhigh' ] _low = request.form[ 'inputlow' ] _volume = request.form[ 'inputvolume' ] _open = request.form[ 'inputopen' ] _close = request.form[ 'inputclose' ] _id = request.form[ 'id' ] # validate the received values if _symbol and _date and _high and _low and _volume and _open and _close and _id and request.method = = 'POST' : #do not save password as a plain text #_hashed_password = generate_password_hash(_password) # save edits sql = "UPDATE bse SET symbol=%s,date1=%s,high=%s,low=%s,volume=%s,open=%s,close=%s, WHERE user_id=%s" data = (_symbol,_date,_high,_low,_volume,_open,_close, _id,) conn = mysql.connect() cursor = conn.cursor() cursor.execute(sql, data) conn.commit() flash( 'BSE updated successfully!' ) #return json.dumps({'message':'BSE details updated successfully!'})#('BSE details updated successfully!') return redirect( '/' ) else : return 'Error while updating user' except Exception as e: print (e) return 'Error' finally : cursor.close() conn.close() @app .route( '/delete/<int:id>' ) def delete_user( id ): try : conn = mysql.connect() cursor = conn.cursor() cursor.execute( "DELETE FROM bse WHERE user_id=%s" , ( id ,)) conn.commit() flash( 'BSE deleted successfully!' ) return redirect( '/' ) except Exception as e: print (e) finally : cursor.close() conn.close() if __name__ = = "__main__" : app.run() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<doctype html> <title> List of BSE details< / title> <p><a href = "{{ url_for('.add_user_view') }}" > Add User < / a>< / p> <p> { % with messages = get_flashed_messages() % } { % if messages % } <ul class = flashes> { % for message in messages % } <li>{{ message }}< / li> { % endfor % } < / ul> { % endif % } { % endwith % } < / p> {{ table }} |