Home Article LOGING + PLACE ORDER ROBO LOGING + PLACE ORDER ROBO Software Technique Web Technique All Computer Language and Computer Language Practice Computer Educa April 23, 2025 0 Comments Share: Facebook Twitter Google+ Pinterest Whatsapp TREDING from flask import Flask, render_template_string, request, redirect, url_for, session, flash from SmartApi import SmartConnect import pyotp import os import time app = Flask(__name__) app.secret_key = os.urandom(24) # Secret key for session management # Setup API connection (SmartAPI) api_key = 'your api key' # Your SmartAPI key here smartApi = SmartConnect(api_key) # Function to generate OTP def generate_otp(token): """ Generates an OTP using the provided token. """ try: otp = pyotp.TOTP(token).now() return otp except Exception as e: raise e # HTML code for login page login_page_html = """ Login Page Login Username: Password: """ # HTML code for dashboard (with Robo Order button and entry price form) dashboard_html = """ Dashboard Welcome to the Dashboard! You are logged in using SmartAPI. {% if request.method == 'POST' %} Enter the price for Robo Order: Entry Price: {% endif %} """ # Route for Login Page (GET method) @app.route('/') def login_page(): return render_template_string(login_page_html) # Route for handling login (POST method) @app.route('/login', methods=['POST']) def login(): username = request.form['username'] password = request.form['password'] # Generate OTP (replace with your actual OTP secret token) token = os.getenv("OTP_SECRET_TOKEN", "your totp") otp = generate_otp(token) # Attempt to create a session using SmartAPI credentials try: # Generate session using username, password, and OTP session_data = smartApi.generateSession(username, password, otp) if session_data.get('status', False): jwt_token = session_data['data'].get('jwtToken', None) refresh_token = session_data['data'].get('refreshToken', None) if jwt_token and refresh_token: session['logged_in'] = True session['jwt_token'] = jwt_token session['refresh_token'] = refresh_token session['last_activity'] = time.time() return redirect(url_for('dashboard')) else: return "Session generation failed: Missing JWT or refresh token." else: return "Session generation failed." except Exception as e: return f"Error: {str(e)}" # Route for dashboard page (only accessible after login) @app.route('/dashboard', methods=['GET', 'POST']) def dashboard(): if 'logged_in' not in session: return redirect(url_for('login_page')) # Check for session timeout (30 minutes) if time.time() - session.get('last_activity', time.time()) > 1800: session.clear() flash('Session expired. Please log in again.') return redirect(url_for('login_page')) session['last_activity'] = time.time() return render_template_string(dashboard_html) # Route for Robo Order (shows entry price form) @app.route('/robo_order', methods=['POST']) def robo_order(): return render_template_string(dashboard_html, request=request) # Route to place the order @app.route('/place_order', methods=['POST']) def place_order(): if 'logged_in' not in session: return redirect(url_for('login_page')) entry_price = request.form['price'] # Calculate total quantity: lot_size * quantity lot_size = 75 quantity = 50 total_quantity = lot_size * quantity # 75 * 2 = 150 try: orderparams = { "variety": "ROBO", "tradingsymbol": "NIFTY24APR2524100CE", "symboltoken": "79547", "transactiontype": "BUY", "exchange": "NFO", "ordertype": "LIMIT", "producttype": "BO", "duration": "DAY", "price": entry_price, "squareoff": "0", "stoploss": "0", "quantity": str(total_quantity) } order_response = smartApi.placeOrder(orderparams) if order_response.get('status', False): flash(f"Order placed successfully at price {entry_price}") else: flash("Failed to place order") except Exception as e: flash(f"Error: {str(e)}") return redirect(url_for('dashboard')) # Route for logging out @app.route('/logout') def logout(): session.clear() flash('You have been logged out successfully.') return redirect(url_for('login_page')) if __name__ == '__main__': app.run(debug=True) Copy Copied Text:
No comments