https://python-guide-es.readthedocs.io/es/guide-es/dev/virtualenvs.html
Create an environment
ednalan@Cairocoders myapp % pip install virtualenv
ednalan@Cairocoders myapp % pip install virtualenv
Activate the environment
ednalan@Cairocoders myapp % source venv/bin/activate
(venv) ednalan@Cairocoders myapp %
Install Flask
https://pypi.org/project/Flask/
(venv) ednalan@Cairocoders myapp % pip install -U Flask
(venv) ednalan@Cairocoders myapp % flask run
Install requirements
pip install -U flask-cors
https://pypi.org/project/Flask-Cors/
Flask-SQLAlchemy
Flask-SQLAlchemy is an extension for Flask that adds support for SQLAlchemy to your application.
https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/
(venv) PS C:\flask_dev\myapp>pip install -U Flask-SQLAlchemy
python3 -m pip install
https://pypi.org/project/pymysql/
app.py
//app.py from flask import Flask, jsonify from flask_cors import CORS #ModuleNotFoundError: No module named 'flask_cors' = pip install Flask-Cors from flask_marshmallow import Marshmallow #ModuleNotFoundError: No module named 'flask_marshmallow' = pip install flask-marshmallow https://pypi.org/project/flask-marshmallow/ from models import db, Countries, State, City app = Flask(__name__) CORS(app, supports_credentials=True) #app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///flaskdb.db' # Databse configuration mysql Username:password@hostname/databasename app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost:8889/nextjsdb' db.init_app(app) with app.app_context(): db.create_all() ma=Marshmallow(app) class CountriesSchema(ma.Schema): class Meta: fields = ('ID','countryName') class StateSchema(ma.Schema): class Meta: fields = ('id','name','country_id') class CitySchema(ma.Schema): class Meta: fields = ('id','name','stateid') countries_schema = CountriesSchema(many=True) state_schema = StateSchema(many=True) city_schema = CitySchema(many=True) @app.route("/") def hello_world(): return "Hello, World!" @app.route('/listall',methods =['GET']) def listall(): all_countries = Countries.query.all() results = countries_schema.dump(all_countries) return jsonify(results) @app.route('/state/<get_state>',methods =['GET']) def statebycountry(get_state): state = State.query.filter_by(country_id=get_state).all() results = state_schema.dump(state) return jsonify(results) @app.route('/city/<get_city>',methods =['GET']) def city(get_city): city_data = City.query.filter_by(stateid=get_city).all() results = city_schema.dump(city_data) return jsonify(results) if __name__ == "__main__": app.run(debug=True)models.py
//models.py from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Countries(db.Model): __tablename__ = "countries" ID = db.Column(db.Integer, primary_key=True) countryName = db.Column(db.String(120), index=True, unique=True) class State(db.Model): __tablename__ = "state" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(120), index=True, unique=True) country_id = db.Column(db.Integer) class City(db.Model): __tablename__ = "city" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(120), index=True, unique=True) stateid = db.Column(db.Integer)Country State and City : https://github.com/cairocodes/cairocoders/blob/main/country-state-city.sql
run (venv) C:\flask_dev\myapp>flask run
Next.js
Install requirements
npm install axios
https://www.npmjs.com/package/axios
app\page.tsx
//app\page.tsx import Form from "@/components/form"; export default function Home() { return ( <div className="w-screen py-20 flex justify-center flex-col items-center"> <div className="flex items-center justify-between gap-1 mb-5"> <h1 className="text-4xl font-bold">Next.js 14 Python Flask Dynamic Select Country State City Mysql | TailwindCSS DaisyUI</h1> </div> <div className="overflow-x-auto"> <Form/> </div> </div> ); }components\form.tsx
//components\form.tsx "use client"; import React, { useEffect, useState } from "react"; import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios export default function Form() { const [country, setCountry]= useState([]); const [countryid, setCountryid]= useState('0'); const [stateid, setStateid]= useState('0'); const [state, setState]= useState([]); const [city, setCity]= useState([]); useEffect(() => { const fetchCountry = async () => { axios.get('http://127.0.0.1:5000/listall') .then(function (response) { //handle success console.log(response) setCountry(response.data) }) .catch(function (response) { //handle error console.log(response) }); } fetchCountry() }, []) const handlecountry=(event)=>{ const getcoutryid= event.target.value; console.log(getcoutryid); setCountryid(getcoutryid); event.preventDefault(); } const handlestate=(event)=>{ const stateid= event.target.value; console.log(stateid); setStateid(stateid); event.preventDefault(); } useEffect( ()=>{ const getstate= async ()=>{ axios.get(`http://127.0.0.1:5000/state/${countryid }`) .then(function (response) { //handle success //console.log(response) setState(response.data) }) .catch(function (response) { //handle error console.log(response) }); } getstate(); },[countryid]); useEffect( ()=>{ const getcity= async ()=>{ axios.get(`http://127.0.0.1:5000/city/${stateid }`) .then(function (response) { //handle success //console.log(response) setCity(response.data) }) .catch(function (response) { //handle error console.log(response) }); } getcity(); },[stateid]); return ( <> <div className="max-w-xl mx-auto mt-5"> <div> <form> <div className="mb-5 pr-4 pl-4"> <label className="block text-sm font-medium text-gray-900"> Country </label> <select onChange={(e)=>handlecountry(e)} name="country" className="select select-info w-full max-w-xs"> <option defaultValue={'DEFAULT'}>--Select Country--</option> { country.map( (getcon)=>( <option key={getcon.ID} value={getcon.ID }> { getcon.countryName}</option> )) } </select> </div> <div className="mb-5 pr-4 pl-4"> <label className="block text-sm font-medium text-gray-900"> State </label> <select onChange={(e)=>handlestate(e)} name="state" className="select select-success w-full max-w-xs"> <option defaultValue={'DEFAULT'}>--Select State--</option> { state.map( (st,index)=>( <option key={index} value={st.id}>{ st.name}</option> )) } </select> </div> <div className="mb-5 pr-4 pl-4"> <label className="block text-sm font-medium text-gray-900"> City </label> <select name="city" className="select select-warning w-full max-w-xs"> <option>--Select City--</option> { city.map( (st,index)=>( <option key={index} value={st.id}>{ st.name}</option> )) } </select> </div> </form> </div> </div> </> ); }run C:\nextjs>npm run dev