一、登錄界面
Python123.i0是一個專業的Python編程課程網站,需要登錄才能使用其提供的服務。登錄界面如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Python123 Login</title>
</head>
<body>
<form action="/login" method="post">
<label>Username:</label>
<input type="text" name="username"><br>
<label>Password:</label>
<input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
從代碼可以看出,登錄界面是一個HTML表單,使用POST方法向指定URL提交用戶名和密碼。
二、後台驗證
下面是Python後台登錄驗證的代碼:
import hashlib
class User:
def __init__(self, username, password):
self.username = username
self.salt = 'python123'
self.password = self.encrypt(password)
def encrypt(self, password):
md5 = hashlib.md5()
pwd = password + self.salt
md5.update(pwd.encode('utf-8'))
return md5.hexdigest()
def authenticate(self, password):
return self.encrypt(password) == self.password
users = {
'admin': User('admin', 'admin'),
'user1': User('user1', '123456')
}
def login(username, password):
user = users.get(username)
if user and user.authenticate(password):
return True
else:
return False
前台通過POST方法提交的用戶名和密碼會由後台進行驗證。在Python的這段代碼中,我們創建了一個User類來保存用戶名和密碼,密碼加密用了MD5散列加鹽的方式。login()函數接收HTTP請求中提交的用戶名和密碼,從users字典中查找對應的User,再調用該User實例的authenticate()方法判斷密碼是否匹配。
三、會話管理
為了更好地管理用戶的會話,Python123.i0使用了Flask框架提供的session機制,代碼如下:
from flask import Flask, session, redirect, url_for, request, render_template
app = Flask(__name__)
app.secret_key = 'python123'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if login(username, password):
session['username'] = username
return redirect(url_for('index'))
else:
return render_template('login.html', message='Invalid username or password!')
else:
return render_template('login.html')
@app.route('/')
def index():
if 'username' in session:
username = session['username']
return 'Hello, ' + username
else:
return redirect(url_for('login'))
代碼中,我們使用了Flask的裝飾器@app.route()來指定URL對應的視圖函數。在/login視圖函數中,判斷HTTP請求的方法是否為POST,如果是,就獲取提交的用戶名和密碼,將它們傳遞給已經創建的login()函數進行驗證,如果驗證通過,就在session中保存該用戶的用戶名,並且redirect到index()視圖函數,否則返回登錄界面並展示一個提示信息。在/index視圖函數中,我們檢查session中是否保存了用戶名,如果是,就返回該用戶名,否則就redirect到登錄界面。
四、安全性
為了保護用戶信息的安全,Python123.i0現在已經支持HTTPS,使用了SSL技術加密網站和客戶端之間的數據傳輸,代碼如下:
from flask_sslify import SSLify
if __name__ == '__main__':
sslify = SSLify(app)
app.run()
在Python代碼中,我們使用了Flask-SSLify擴展來啟用SSL。同時,在Nginx等Web服務器中,也需要進行相應的配置才能正常使用HTTPS。
五、外觀美化
最後,我們可以對Python123.i0的登錄界面進行美化,這裡使用了Semantic UI這個前端框架,代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Python123 Login</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/semantic-ui/2.2.10/semantic.min.css">
</head>
<body>
<div class="ui container">
<div class="ui middle aligned center aligned grid">
<div class="column">
<h2 class="ui teal image header">
<img src="https://en.gravatar.com/userimage/216075386/8c9f4102b7ff097c05bc2a5ac20ff9a3.png?size=200" class="image">
<div class="content">
Log-in to your account
</div>
</h2>
<form class="ui large form" action="/login" method="post">
<div class="ui stacked segment">
<div class="field">
<div class="ui left icon input">
<i class="user icon"></i>
<input type="text" name="username" placeholder="Username">
</div>
</div>
<div class="field">
<div class="ui left icon input">
<i class="lock icon"></i>
<input type="password" name="password" placeholder="Password">
</div>
</div>
<input class="ui fluid large teal submit button" type="submit" value="Login">
</div>
</form>
<div class="ui message">
New to us? <a href="#">Sign Up</a>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/semantic-ui/2.2.10/semantic.min.js"></script>
</body>
</html>
通過HTML和CSS代碼,我們可以很容易地實現登錄界面的美化。同時,我們可以使用一些效果更加豐富的JavaScript前端框架,例如Vue.js、React等,來實現更加靈活和美觀的前端界面。
原創文章,作者:UEGNU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/370140.html