杰瑞科技汇

Python表单登录如何实现?

Of course! Creating a login form in Python can be done in several ways, depending on the complexity and purpose of your application.

Here's a comprehensive guide covering the most common methods, from a simple command-line script to a full-fledged web application.

Method 1: Simple Command-Line Script (No External Libraries)

This is the most basic approach. It's great for learning the fundamentals of user input and simple data storage.

Concept:

  1. Ask the user for a username and password.
  2. Store the credentials in a dictionary (for simplicity).
  3. When a user tries to log in, check if their input matches the stored credentials.

Code (login_cli.py):

# A simple in-memory "database" of users.
# In a real application, NEVER store passwords in plain text.
users_db = {
    "admin": "password123",
    "alice": "qwerty",
    "bob": "bobspass"
}
def register():
    """Registers a new user."""
    print("\n--- Registration ---")
    username = input("Choose a username: ")
    password = input("Choose a password: ")
    if username in users_db:
        print("Username already exists. Please choose another.")
    else:
        users_db[username] = password
        print("Registration successful!")
def login():
    """Logs in an existing user."""
    print("\n--- Login ---")
    username = input("Enter your username: ")
    password = input("Enter your password: ")
    # Check if username exists and password matches
    if username in users_db and users_db[username] == password:
        print(f"\nWelcome, {username}! Login successful.")
        return True
    else:
        print("\nLogin failed. Invalid username or password.")
        return False
def main():
    """Main function to run the program."""
    while True:
        print("\nMain Menu:")
        print("1. Register")
        print("2. Login")
        print("3. Exit")
        choice = input("Enter your choice (1-3): ")
        if choice == '1':
            register()
        elif choice == '2':
            login()
        elif choice == '3':
            print("Exiting program. Goodbye!")
            break
        else:
            print("Invalid choice. Please enter 1, 2, or 3.")
if __name__ == "__main__":
    main()

How to Run:

  1. Save the code as login_cli.py.
  2. Run it from your terminal: python login_cli.py

Pros:

  • No external libraries needed.
  • Simple to understand and implement.

Cons:

  • Not secure: Passwords are stored in plain text. This is a major security risk.
  • In-memory only: Data is lost when the program closes.
  • No graphical user interface (GUI).

Method 2: Graphical User Interface (GUI) with Tkinter

Tkinter is Python's standard GUI library. It's included with Python, so no installation is needed. This creates a desktop application window.

Concept:

  1. Create a window with input fields (Entry) for username and password.
  2. Create a button (Button) that triggers a login function when clicked.
  3. The login function checks the input against a stored dictionary.

Code (login_gui.py):

import tkinter as tk
from tkinter import messagebox
# Simple in-memory database
users_db = {
    "admin": "password123",
    "alice": "qwerty",
    "bob": "bobspass"
}
def login():
    """Handles the login logic."""
    username = entry_username.get()
    password = entry_password.get()
    if username in users_db and users_db[username] == password:
        messagebox.showinfo("Login Success", f"Welcome, {username}!")
        # Here you would typically open a new main application window
        root.destroy() # Close the login window
    else:
        messagebox.showerror("Login Failed", "Invalid username or password")
# --- Create the main window ---
root = tk.Tk()"Login Form")
root.geometry("300x150")
# --- Create widgets ---
# Username Label and Entry
label_username = tk.Label(root, text="Username:")
label_username.pack(pady=5)
entry_username = tk.Entry(root)
entry_username.pack()
# Password Label and Entry
label_password = tk.Label(root, text="Password:")
label_password.pack(pady=5)
entry_password = tk.Entry(root, show="*") # 'show="*"' hides the password
entry_password.pack()
# Login Button
login_button = tk.Button(root, text="Login", command=login)
login_button.pack(pady=10)
# --- Start the GUI event loop ---
root.mainloop()

How to Run:

  1. Save the code as login_gui.py.
  2. Run it from your terminal: python login_gui.py

Pros:

  • Creates a visual desktop application.
  • Still uses only built-in libraries.

Cons:

  • Still not secure (passwords in plain text).
  • Data is still in-memory.
  • The GUI is very basic.

Method 3: Web Application with Flask

For a more robust and scalable solution, you'd build a web application. Flask is a popular and lightweight Python web framework.

Concept:

  1. Backend (Flask): Creates a web server. It handles routes (e.g., /login, /home), processes form data, and manages user sessions.
  2. Frontend (HTML/CSS): Provides the actual login form that the user sees in their browser.
  3. Security: Uses werkzeug.security to securely hash passwords before storing them.

Step 1: Install Flask

pip install Flask

Step 2: Create the Project Structure

my_flask_app/
├── app.py          # Main Flask application file
└── templates/
    └── login.html  # HTML template for the login page

Step 3: Write the Code

app.py (The Flask Backend)

from flask import Flask, render_template, request, redirect, url_for, flash, session
import werkzeug.security
app = Flask(__name__)
# A secret key is needed for session management and flashing messages
app.secret_key = 'a_very_secret_key'
# In-memory "database" with hashed passwords
# In a real app, you would use a proper database like SQLite, PostgreSQL, etc.
users_db = {
    "admin": werkzeug.security.generate_password_hash("password123"),
    "alice": werkzeug.security.generate_password_hash("qwerty"),
    "bob": werkzeug.security.generate_password_hash("bobspass")
}
@app.route('/')
def home():
    if 'username' in session:
        return f'Welcome, {session["username"]}! You are logged in. <a href="/logout">Logout</a>'
    return redirect(url_for('login'))
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        user_hashed_password = users_db.get(username)
        if user_hashed_password and werkzeug.security.check_password_hash(user_hashed_password, password):
            session['username'] = username
            flash('Login successful!', 'success')
            return redirect(url_for('home'))
        else:
            flash('Invalid username or password.', 'error')
    return render_template('login.html')
@app.route('/logout')
def logout():
    session.pop('username', None)
    flash('You have been logged out.', 'info')
    return redirect(url_for('login'))
if __name__ == '__main__':
    app.run(debug=True)

templates/login.html (The Frontend)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">Login</title>
    <style>
        body { font-family: sans-serif; background-color: #f4f4f4; display: flex; justify-content: center; align-items: center; height: 100vh; }
        .login-container { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
        input[type="text"], input[type="password"] { width: 100%; padding: 8px; margin-bottom: 10px; box-sizing: border-box; }
        input[type="submit"] { background-color: #4CAF50; color: white; padding: 10px 15px; border: none; cursor: pointer; }
        .flash { padding: 10px; margin-bottom: 15px; border-radius: 4px; }
        .flash.success { background-color: #d4edda; color: #155724; }
        .flash.error { background-color: #f8d7da; color: #721c24; }
    </style>
</head>
<body>
    <div class="login-container">
        <h2>Login</h2>
        <!-- Display flash messages -->
        {% with messages = get_flashed_messages(with_categories=true) %}
          {% if messages %}
            {% for category, message in messages %}
              <div class="flash {{ category }}">{{ message }}</div>
            {% endfor %}
          {% endif %}
        {% endwith %}
        <form method="POST">
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" required>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" required>
            <input type="submit" value="Login">
        </form>
    </div>
</body>
</html>

How to Run:

  1. Make sure your file structure is correct.
  2. Open your terminal in the my_flask_app directory.
  3. Run the Flask app: flask run or python app.py.
  4. Open your web browser and go to http://127.0.0.1:5000.

Pros:

  • Real-world application: This is how most web logins work.
  • Secure: Passwords are hashed.
  • Persistent sessions: The user remains logged in across different pages.
  • Scalable: Can be deployed to a server.

Cons:

  • Requires installing external libraries (Flask).
  • More complex than the previous methods.

Summary: Which Method to Choose?

Method Best For Complexity Security
Command-Line Learning basics, simple scripts. Low Very Low
Tkinter GUI Creating simple desktop apps. Medium Low
Flask Web App Building real, secure, and scalable web applications. High High (when done correctly)

For any serious project, Method 3 (Flask) is the standard approach. For learning or simple utilities, Method 1 or 2 are good starting points.

分享:
扫描分享到社交APP
上一篇
下一篇