Python生态
Python基础
Python语言特性
Python是一种高级编程语言,具有以下特点:
- 简洁易读:语法清晰,接近自然语言
- 动态类型:变量类型在运行时确定
- 面向对象:支持面向对象编程
- 丰富的标准库:内置大量实用模块
- 跨平台:支持Windows、macOS、Linux
Python版本
- Python 2.x:已停止维护
- Python 3.x:当前主流版本,推荐使用3.8+
Web框架
Django
Django是一个全栈Web框架,提供完整的Web开发解决方案。
项目结构
myproject/
├── manage.py
├── myproject/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── myapp/
├── __init__.py
├── admin.py
├── models.py
├── views.py
└── urls.py
模型定义
python
# models.py
from django.db import models
class User(models.Model):
username = models.CharField(max_length=100, unique=True)
email = models.EmailField(unique=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.username
视图开发
python
# views.py
from django.shortcuts import render, get_object_or_404
from django.http import JsonResponse
from .models import User
from .serializers import UserSerializer
def user_list(request):
users = User.objects.all()
serializer = UserSerializer(users, many=True)
return JsonResponse(serializer.data, safe=False)
def user_detail(request, pk):
user = get_object_or_404(User, pk=pk)
serializer = UserSerializer(user)
return JsonResponse(serializer.data)
URL配置
python
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('users/', views.user_list, name='user_list'),
path('users/<int:pk>/', views.user_detail, name='user_detail'),
]
Flask
Flask是一个轻量级Web框架,灵活且易于扩展。
基础应用
python
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
@app.route('/users', methods=['GET'])
def get_users():
users = User.query.all()
return jsonify([{
'id': user.id,
'username': user.username,
'email': user.email
} for user in users])
@app.route('/users', methods=['POST'])
def create_user():
data = request.get_json()
user = User(username=data['username'], email=data['email'])
db.session.add(user)
db.session.commit()
return jsonify({'message': 'User created successfully'}), 201
if __name__ == '__main__':
app.run(debug=True)
FastAPI
FastAPI是一个现代、快速的Web框架,基于Python 3.6+的类型提示。
基础使用
python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List
app = FastAPI()
class User(BaseModel):
username: str
email: str
class UserResponse(User):
id: int
# 模拟数据库
users_db = []
user_id_counter = 1
@app.get("/users", response_model=List[UserResponse])
async def get_users():
return users_db
@app.post("/users", response_model=UserResponse)
async def create_user(user: User):
global user_id_counter
new_user = UserResponse(id=user_id_counter, **user.dict())
users_db.append(new_user)
user_id_counter += 1
return new_user
@app.get("/users/{user_id}", response_model=UserResponse)
async def get_user(user_id: int):
for user in users_db:
if user.id == user_id:
return user
raise HTTPException(status_code=404, detail="User not found")
数据访问
SQLAlchemy
SQLAlchemy是Python最流行的ORM框架。
python
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(100), unique=True, nullable=False)
email = Column(String(120), unique=True, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow)
# 创建数据库连接
engine = create_engine('sqlite:///users.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# 数据库操作
def create_user(username, email):
user = User(username=username, email=email)
session.add(user)
session.commit()
return user
def get_user_by_id(user_id):
return session.query(User).filter(User.id == user_id).first()
Django ORM
python
# 查询操作
users = User.objects.all()
user = User.objects.get(id=1)
active_users = User.objects.filter(is_active=True)
# 创建和更新
user = User.objects.create(username='john', email='[email protected]')
user.username = 'jane'
user.save()
# 删除
user.delete()
异步编程
asyncio
python
import asyncio
import aiohttp
async def fetch_user(session, user_id):
async with session.get(f'https://api.example.com/users/{user_id}') as response:
return await response.json()
async def fetch_all_users():
async with aiohttp.ClientSession() as session:
tasks = [fetch_user(session, i) for i in range(1, 11)]
users = await asyncio.gather(*tasks)
return users
# 运行异步函数
users = asyncio.run(fetch_all_users())
FastAPI异步支持
python
from fastapi import FastAPI
import httpx
app = FastAPI()
@app.get("/users/{user_id}")
async def get_user(user_id: int):
async with httpx.AsyncClient() as client:
response = await client.get(f"https://api.example.com/users/{user_id}")
return response.json()
数据处理
Pandas
python
import pandas as pd
# 读取数据
df = pd.read_csv('users.csv')
# 数据操作
filtered_df = df[df['age'] > 25]
grouped_df = df.groupby('city').agg({'age': 'mean'})
# 数据导出
df.to_csv('processed_users.csv', index=False)
NumPy
python
import numpy as np
# 数组操作
arr = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(arr)
std_value = np.std(arr)
# 矩阵运算
matrix = np.array([[1, 2], [3, 4]])
inverse = np.linalg.inv(matrix)
机器学习
Scikit-learn
python
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import pandas as pd
# 加载数据
data = pd.read_csv('data.csv')
X = data.drop('target', axis=1)
y = data['target']
# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测
predictions = model.predict(X_test)
mse = mean_squared_error(y_test, predictions)
TensorFlow/Keras
python
import tensorflow as tf
from tensorflow import keras
# 构建模型
model = keras.Sequential([
keras.layers.Dense(128, activation='relu', input_shape=(784,)),
keras.layers.Dropout(0.2),
keras.layers.Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))
测试
pytest
python
import pytest
from myapp.models import User
def test_create_user():
user = User(username='test', email='[email protected]')
assert user.username == 'test'
assert user.email == '[email protected]'
@pytest.fixture
def sample_user():
return User(username='fixture_user', email='[email protected]')
def test_user_with_fixture(sample_user):
assert sample_user.username == 'fixture_user'
Django测试
python
from django.test import TestCase
from .models import User
class UserModelTest(TestCase):
def setUp(self):
self.user = User.objects.create(
username='testuser',
email='[email protected]'
)
def test_user_creation(self):
self.assertEqual(self.user.username, 'testuser')
self.assertEqual(self.user.email, '[email protected]')
部署
Docker
dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Gunicorn
python
# gunicorn.conf.py
bind = "0.0.0.0:8000"
workers = 4
worker_class = "uvicorn.workers.UvicornWorker"
包管理
pip
bash
# 安装包
pip install django
pip install -r requirements.txt
# 创建虚拟环境
python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate # Windows
Poetry
bash
# 安装Poetry
curl -sSL https://install.python-poetry.org | python3 -
# 创建项目
poetry new myproject
# 添加依赖
poetry add django
poetry add --dev pytest
# 运行命令
poetry run python manage.py runserver
最佳实践
项目结构
myproject/
├── app/
│ ├── __init__.py
│ ├── models.py
│ ├── views.py
│ └── utils.py
├── tests/
├── requirements.txt
├── README.md
└── .env
环境配置
python
# settings.py
import os
from dotenv import load_dotenv
load_dotenv()
DATABASE_URL = os.getenv('DATABASE_URL', 'sqlite:///db.sqlite3')
SECRET_KEY = os.getenv('SECRET_KEY', 'default-secret-key')
DEBUG = os.getenv('DEBUG', 'False').lower() == 'true'
Python生态在Web开发、数据分析、机器学习等领域都有广泛应用,选择合适的框架和工具可以大大提高开发效率。