簡體   English   中英

在 React 前端(使用 Flask)顯示來自 SQL 數據庫的搜索結果

[英]Displaying search results from SQL database on React front-end (with Flask)

我對 React 和 Flask 很陌生。 我正在嘗試構建一個響應表單,允許用戶使用 Flask 框架在 SQL 數據庫中搜索一個人。 我有不同的部分,但不確定如何讓用戶輸入搜索詞 - 任何幫助將不勝感激! 先感謝您!

到目前為止,我的 app.py 看起來像這樣:

from flask import Flask, jsonify
import mysql.connector

app = Flask(__name__)
port = 5000

connection = mysql.connector.connect(
    host='localhost',
    database='database',
    user='*****',
    password='*****',
)


@app.get('/person')
def get_person(search_term):
    name_input = search_term
    cursor = connection.cursor(dictionary=True)
    cursor.execute("""SELECT name, date_of_birth, nationality, information FROM person_list WHERE ((SOUNDEX(%s) = SOUNDEX(name)) OR (names LIKE CONCAT('%', %s, '%')));""", (name_input, name_input))
    results = cursor.fetchall()
    cursor.close()
    response = jsonify(results)
    response.headers.add("Access-Control-Allow-Origin", "*")
    return response

app.run(port=port)

在我的 React 項目中,我有一個 api.ts 文件來連接到后端:

export async function getPerson() {
    const response = await fetch("http://127.0.0.1:5000/person");
    return await response.json();
}

搜索表單如下所示:

function Search(){
    return(
        <div>
            <div id="search">
            <header>
                <h1>Search Person</h1>
            </header>
            <div className="tab-container">
                    <ul className="tabs">
                        <a className="active">PERSON</a>
                    </ul>
                <div className="tab-content">
                    <div id="tabf0-1">
                            <form>
                                <div>
                                    <label >Name*</label>
                                    <i className="fas fa-user"></i>
                                    <input type="text" name="name" id="name"/>
                                    <i className="fas fa-exclamation-circle failure-icon"></i>
                                    <i className="far fa-check-circle success-icon"></i>
                                    <div className="error"></div>
                                    {/* Add for="dob"*/}
                                    <label>Date of Birth (optional)</label>
                                    <i className="fas fa-calendar"></i>
                                    <input type="dob" name="dob" id="dob" placeholder="YYYY-MM-DD or YYYY"/>
                                    <i className="fas fa-exclamation-circle failure-icon"></i>
                                    <i className="far fa-check-circle success-icon"></i>
                                    <div className="error"></div>
                                </div>
                                <button type="submit" id="submit">Search</button>
                            </form>
                        </div>
                    </div>
                </div>
                </div>
        </div>
    )
}

export default Search

在 PersonCard.tsx 組件中:

import Person from '../models/Person';

function PersonCard({id, name, nationality, information}: Person) {
  return (
  <div className="card mt-3">
    <div className="card-body">
      <p>{name}</p>
      <p>{id}</p>
      <p>{nationality}</p>
      <p>{information}</p>
    </div>
  </div>
  )
}

export default PersonCard;

最后在 People.tsx 中:

import React, { useState, useEffect } from 'react';
import { getPerson } from '../api/api';
import PersonCard from '../components/PersonCard';
import Person from '../models/Person';

function People() {
  const [people, setPeople] = useState<Person[] | null>(null);

  useEffect(function() {
    getPerson().then(data => setPeople(data));
  }, [searchTerm]);

  return (
    <main className="container pt-6 py-4">
      <div className="card">
        <div className="card-body">
          <h1 className="display-4">Users</h1>
          {people === null
            ? 'Loading...'
            : people.map(person => <PersonCard id={person.id} names={person.names} nationality={person.nationality} information={person.information} />)}
        </div>
      </div>
    </main>
  );
}

export default People;

如何從表單獲取用戶輸入到 app.py 以搜索數據庫?

每當您從前端單擊搜索按鈕時,都會獲取在該字段中輸入的值。 然后發出 API 請求。 然后通過 props 將數據傳遞給 PersonCard 組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM