Een webapp maken van kras met behulp van Python Flask en MySQL

In deze serie zullen we Python, Flask en MySQL gebruiken om een ​​eenvoudige webtoepassing helemaal opnieuw te maken. Het wordt een eenvoudige bucketlist-applicatie waarin gebruikers zich kunnen registreren, inloggen en hun bucketlist kunnen maken.

Deze tutorial gaat ervan uit dat je enige basiskennis hebt van de Python programmeertaal. We zullen gebruiken fles, een Python-webtoepassingsraamwerk om onze toepassing te maken met MySQL als de achterkant.

Als je je Python-vaardigheden wilt opfrissen, probeer dan de cursus Introduction to Python, die je een stevige basis geeft in de taal voor slechts $ 5.

Introductie van Python Flask

Flask is een Python-framework voor het maken van webapplicaties. Van de officiële site,

Flask is een microframe voor Python op basis van Werkzeug, Jinja 2 en goede bedoelingen.

Als we aan Python denken, is het Django-raamwerk het feitelijke kader dat bij ons opkomt. Maar vanuit het perspectief van een Python-beginner is Flask gemakkelijker om mee te beginnen, vergeleken met Django.

Flask instellen

Het opzetten van Flask is vrij eenvoudig en snel. Met Pip pakketmanager, alles wat we moeten doen is: 

pip-installatiekolf

Als u klaar bent met het installeren van Flask, maakt u een map met de naam FlaskApp. Navigeer naar de FlaskApp map en maak een bestand met de naam app.py. Importeer de fles module en maak een app met behulp van Flask zoals getoond:

van de flacon importeren Flask app = Flask (__ name__)

Definieer nu de basisroute / en de bijbehorende verzoekbehandelaar:

@ app.route ("/") def main (): terug "Welkom!"

Controleer vervolgens of het uitgevoerde bestand het hoofdprogramma is en voer de app uit:

if __name__ == "__main__": app.run ()

Sla de wijzigingen op en voer het uit app.py:

python app.py

Richt uw browser op http: // localhost: 5000 / en u zou het welkomstbericht moeten hebben.

Een startpagina maken

Ten eerste moeten we bij het uitvoeren van de toepassing een startpagina weergeven met de nieuwste bucketlist-items die door gebruikers zijn toegevoegd. Dus laten we onze startpagina toevoegen aan onze applicatiemap.

Flask zoekt naar sjabloonbestanden in de templates map. Dus navigeer naar de PythonApp map en maak een map aan met de naam templates. Binnen templates, maak een bestand aan met de naam index.html. Doe open index.html en voeg de volgende HTML toe:

   Python Flask Bucket Lijst App     

Python Flask-app

Bucketlijst-app

Schrijf je vandaag in

Verlanglijstje

Donec id elit non mi porta gravida bij eget metus. Maecenas faucibus mollis interdum.

Verlanglijstje

Morbi leo risus, porta ac consectetur ac, vestibulum bij eros. Cras mattis consectetur purus sit amet fermentum.

Verlanglijstje

Maecenas sed diam eget risus varius blandit sit amet non magna.

Verlanglijstje

Donec id elit non mi porta gravida bij eget metus. Maecenas faucibus mollis interdum.

Verlanglijstje

Morbi leo risus, porta ac consectetur ac, vestibulum bij eros. Cras mattis consectetur purus sit amet fermentum.

Verlanglijstje

Maecenas sed diam eget risus varius blandit sit amet non magna.

© Bedrijf 2015

Doe open app.py en importeer render_template, die we zullen gebruiken om de sjabloonbestanden te renderen.

uit de kolf importfles, render_template

Wijzig de hoofdmethode om het gerenderde sjabloonbestand terug te zetten.

def main (): return render_template ('index.html')

Sla de wijzigingen op en start de server opnieuw op. Richt uw browser op http: // localhost: 5000 / en u zou het onderstaande scherm moeten hebben:

Een aanmeldingspagina maken

Stap 1: De database instellen

We zullen gebruiken MySQL als de achterkant. Dus log in op MySQL vanaf de opdrachtregel, of als u liever een GUI-achtige MySQL-werkbank hebt, kunt u dat ook gebruiken. Maak eerst een database met de naam Verlanglijstje. Vanaf de opdrachtregel: 

mysql -u  -p

Voer het vereiste wachtwoord in en voer bij het inloggen de volgende opdracht uit om de database aan te maken:

CREËER DATABASE BucketList;

Nadat de database is gemaakt, maakt u een tabel met de naam tbl_user zoals getoond:

MAAK TAFEL 'BucketList'. 'Tbl_user' ('user_id' BIGINT NULL AUTO_INCREMENT, 'user_name' VARCHAR (45) NULL, 'user_username' VARCHAR (45) NULL, 'user_password' VARCHAR (45) NULL, PRIMARY KEY ('user_id' )); 

We zullen gebruiken Opgeslagen procedures voor onze Python-applicatie om te communiceren met de MySQL-database. Dus, eenmaal de tafel tbl_user is gemaakt, maakt u een opgeslagen procedure genaamd sp_createUser om een ​​gebruiker aan te melden.

Bij het maken van een opgeslagen procedure om een ​​gebruiker te maken in de tbl_user tabel, eerst moeten we controleren of een gebruiker met hetzelfde gebruikersnaam bestaat al. Als dit bestaat, moeten we een foutmelding naar de gebruiker sturen, anders maken we de gebruiker in de gebruikerstabel. Hier is hoe de opgeslagen procedure sp_createUser zou kijken:

DELIMITER $$ CREATE DEFINER = "root" @ 'localhost' PROCEDURE 'sp_createUser' (IN p_naam VARCHAR (20), IN p_username VARCHAR (20), IN p_password VARCHAR (20)) BEGIN if (select exists (selecteer 1 uit tbl_user waar user_username = p_username)) SELECTEER vervolgens 'Gebruikersnaam Bestaat !!'; ELSE invoegen in tbl_user (user_name, user_username, user_password) waarden (p_name, p_username, p_password); STOP ALS; END $$ DELIMITER; 

Stap 2: Maak een aanmeldingsinterface

Navigeer naar de PythonApp / templates map en maak een HTML-bestand met de naam signup.html. Voeg de volgende HTML-code toe aan signup.html:

   Python Flask Bucket Lijst App      

Python Flask-app

Bucketlijst-app

© Bedrijf 2015

Voeg ook het volgende toe CSS zoals signup.css naar de statische map binnenin PythonApp.

body padding-top: 40px; padding-bodem: 40px;  .form-signin max-width: 330px; opvulling: 15px; marge: 0 auto;  .form-signin .form-signin-heading, .form-signin .checkbox margin-bottom: 10px;  .form-signin .checkbox font-weight: normaal;  .form-signin .form-control position: relative; hoogte: auto; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; opvulling: 10px; lettergrootte: 16px;  .form-signin .form-control: focus z-index: 2;  .form-signin input [type = "email"] margin-bottom: -1px; grens-onder-rechter-straal: 0; grens-onder-links radius: 0;  .form-signin input [type = "wachtwoord"] margin-bottom: 10px; grens-bovenkant-linker-straal: 0; grens-bovenkant-juiste-straal: 0; 

In app.py voeg een andere methode toe genaamd showSignUp om de aanmeldingspagina weer te geven zodra er een verzoek bij komt / showSignUp:

@ app.route ('/ showSignUp') def showSignUp (): return render_template ('signup.html')

Sla de wijzigingen op en start de server opnieuw op. Klik op de Inschrijven knop op de startpagina en u zou de aanmeldingspagina moeten hebben zoals getoond: 

Stap 3: Implementeer een aanmeldingsmethode 

Vervolgens hebben we een server-side methode nodig voor de gebruikersinterface om te communiceren met de MySQL-database. Dus navigeer naar PythonApp en open app.py. Maak een nieuwe methode genaamd inschrijven en voeg ook een route toe /inschrijven. Hier is hoe het eruit ziet:

@ app.route ('/ signUp') def signUp (): # create user code is here !!

We gebruiken jQuery AJAX om onze aanmeldingsgegevens te plaatsen in de inschrijven methode, dus we zullen de methode in de routedefinitie specificeren.

@ app.route ('/ signUp', methods = ['POST']) def signUp (): # create user code is here !!

Om de geboekte waarden te kunnen lezen, moeten we importeren verzoek van Flask.

uit kolf importeren Kolf, render_template, verzoek

Gebruik makend van verzoek we kunnen de geposte waarden lezen zoals hieronder getoond:

@ app.route ('/ signUp', methods = ['POST']) def signUp (): # lees de geposte waarden van de UI _name = request.form ['inputName'] _email = request.form ['inputEmail' ] _password = request.form ['inputPassword']

Nadat de waarden zijn gelezen, controleren we eenvoudig of ze geldig zijn en laten we voorlopig een eenvoudig bericht terugzenden:

@ app.route ('/ signUp', methods = ['POST']) def signUp (): # lees de geposte waarden van de UI _name = request.form ['inputName'] _email = request.form ['inputEmail' ] _password = request.form ['inputPassword'] # valideert de ontvangen waarden als _name en _email en _password: return json.dumps ('html': 'Alle velden goed !!') else: return json.dumps (' html ':'Voer de vereiste velden in')

Ook importeren json van Flask, omdat we het in de bovenstaande code gebruiken om terug te keren json gegevens.

uit fles Kolf, render_template, json, verzoek

Stap 4: Maak een aanmeldingsverzoek

We zullen jQuery AJAX gebruiken om het aanmeldingsverzoek naar de Python-methode te verzenden. Downloaden en plaatsen jQuery binnen PythonApp / static / js en voeg een link toe vanaf de aanmeldingspagina. Nadat jQuery is toegevoegd, voegen we een jQuery toe POST verzoek wanneer de gebruiker op de knop klikt Inschrijven knop.

Laten we dus de klikgebeurtenis van de aanmeldingsknop als volgt toevoegen:

$ (function () $ ('# btnSignUp'). klik (functie () $ .ajax (url: '/ signUp', data: $ ('form'). serialize (), type: 'POST' , success: function (response) console.log (response);, error: function (error) console.log (error););););

Sla alle wijzigingen op en start de server opnieuw op. Van de Inschrijven pagina, vul de details in en klik op Inschrijven. Controleer de browserconsole en je zou het onderstaande bericht moeten hebben:

"html": "Alle velden goed !!" 

Stap 5: Roep de opgeslagen procedure van MySQL aan 

Zodra we de hebben naam, e-mailadres en wachtwoord, we kunnen gewoon de op MySQL opgeslagen procedure bellen om de nieuwe gebruiker aan te maken.

Om verbinding te maken met MySQL gebruiken we Flask-MySQL, een Flask-extensie. Om mee te beginnen Kolf-MySQL, installeer het met Pip pakket manager:

pip install flask-mysql

Importeer MySQL binnenin app.py:

van flask.ext.mysql MySQL importeren

Eerder hebben we onze app gedefinieerd zoals getoond:

app = Flask (__ name__)

Samen met die omvatten de volgende MySQL-configuraties:

mysql = MySQL () # MySQL-configuraties app.config ['MYSQL_DATABASE_USER'] = 'jay' app.config ['MYSQL_DATABASE_PASSWORD'] = 'jay' app.config ['MYSQL_DATABASE_DB'] = 'BucketList' app.config ['MYSQL_DATABASE_HOST '] =' localhost 'mysql.init_app (app) 

Laten we eerst de MySQL-verbinding maken:

conn = mysql.connect ()

Zodra de verbinding is gemaakt, hebben we een cursor om onze opgeslagen procedure te bevragen. Dus, met behulp van conn verbinding, maak een cursor.

cursor = conn.cursor ()

Voordat we de procedure voor het aanmaken van gebruikers aanroepen, laten we ons wachtwoord laten zouten met behulp van een hulp van Werkzeug. Importeer de module in app.py:

van werkzeug import generate_password_hash, check_password_hash

Gebruik de zoutmodule om het gehashte wachtwoord te maken.

_hashed_password = generate_password_hash (_password)

Laten we nu de procedure noemen sp_createUser:

cursor.callproc ( 'sp_createUser', (_ naam, _email, _hashed_password))

Als de procedure met succes is uitgevoerd, zullen we de wijzigingen vastleggen en het succesbericht retourneren. 

data = cursor.fetchall () als len (data) 0 is: conn.commit () return json.dumps ('message': 'User created created!') else: return json.dumps ('error': str (data [0]))

Sla de wijzigingen op en start de server opnieuw op. Ga naar de aanmeldingspagina en voer het naam, e-mailadres en wachtwoord en klik op de Inschrijven knop. Na het maken van een geslaagde gebruiker, kunt u een bericht in uw browserconsole zien.

"bericht": "Gebruiker is succesvol gemaakt!"

Inpakken

In deze zelfstudie hebben we gezien hoe u aan de slag kunt gaan met het maken van een webtoepassing met Python-kolf, MySQL en de Kolf-MySQL uitbreiding. We hebben de databasetabellen en opgeslagen procedure gemaakt en ontworpen en de aanmeldingsfunctionaliteit geïmplementeerd. In de volgende zelfstudie nemen we deze reeks naar een hoger niveau door de aanmeldfunctionaliteit en een aantal andere functies te implementeren.

Broncode van deze tutorial is beschikbaar op GitHub.

Laat het ons weten in de reacties hieronder! 

Leer Python

Leer Python met onze complete python-handleiding, of je nu net begint of dat je een ervaren coder bent die op zoek is naar nieuwe vaardigheden.