PyCharm+Django开发攻略
PyCharm 与 Django 开发环境配置
在 PyCharm 中配置 Django 项目非常简单。打开 PyCharm 后选择 "New Project",在左侧菜单中选择 "Django"。指定项目路径并选择 Python 解释器。PyCharm 会自动创建 Django 项目结构并安装必要依赖。
# 创建虚拟环境(可选但推荐) python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows # 安装 Django pip install djangoDjango 项目结构解析
PyCharm 创建的 Django 项目包含标准结构:
manage.py: Django 命令行工具settings.py: 项目配置urls.py: URL 路由配置wsgi.py: WSGI 应用入口
# 示例:查看项目结构 tree -L 2 . ├── db.sqlite3 ├── manage.py └── myproject ├── __init__.py ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py创建 Django 应用
在 PyCharm 终端中运行以下命令创建新应用:
python manage.py startapp myapp应用目录结构:
myapp/ ├── admin.py # 管理员界面配置 ├── apps.py # 应用配置 ├── models.py # 数据模型 ├── tests.py # 测试用例 └── views.py # 视图函数模型定义示例
# myapp/models.py from django.db import models class Product(models.Model): name = models.CharField(max_length=100) price = models.DecimalField(max_digits=10, decimal_places=2) description = models.TextField() created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name视图函数编写
# myapp/views.py from django.shortcuts import render from .models import Product def product_list(request): products = Product.objects.all() return render(request, 'products/list.html', {'products': products}) def product_detail(request, pk): product = Product.objects.get(pk=pk) return render(request, 'products/detail.html', {'product': product})URL 路由配置
# myproject/urls.py from django.contrib import admin from django.urls import path from myapp import views urlpatterns = [ path('admin/', admin.site.urls), path('products/', views.product_list, name='product_list'), path('products/<int:pk>/', views.product_detail, name='product_detail'), ]模板系统使用
创建模板目录结构:
myapp/ └── templates/ └── products/ ├── list.html └── detail.html示例模板代码:
<!-- list.html --> {% for product in products %} <div> <h2>{{ product.name }}</h2> <p>Price: ${{ product.price }}</p> <a href="{% url 'product_detail' pk=product.pk %}">View details</a> </div> {% endfor %}Django 管理界面配置
# myapp/admin.py from django.contrib import admin from .models import Product @admin.register(Product) class ProductAdmin(admin.ModelAdmin): list_display = ('name', 'price', 'created_at') search_fields = ('name', 'description') list_filter = ('created_at',)数据库迁移
在 PyCharm 终端中运行:
python manage.py makemigrations python manage.py migrate运行开发服务器
PyCharm 提供了便捷的运行配置。也可以手动启动:
python manage.py runserver调试技巧
PyCharm 提供了强大的 Django 调试支持:
- 设置断点
- 创建 Django Server 运行配置
- 使用调试模式启动
# 调试示例 def complex_calculation(): import pdb; pdb.set_trace() # PyCharm 会自动捕获 # 或使用断点功能测试用例编写
# myapp/tests.py from django.test import TestCase from .models import Product class ProductTestCase(TestCase): def setUp(self): Product.objects.create(name="Test Product", price=9.99) def test_product_creation(self): product = Product.objects.get(name="Test Product") self.assertEqual(product.price, 9.99)静态文件处理
在settings.py中配置:
STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]创建静态文件目录:
static/ ├── css/ │ └── style.css └── js/ └── app.jsREST API 开发示例
安装 DRF (Django REST Framework):
pip install djangorestframework创建序列化器:
# myapp/serializers.py from rest_framework import serializers from .models import Product class ProductSerializer(serializers.ModelSerializer): class Meta: model = Product fields = '__all__'创建 API 视图:
# myapp/views.py from rest_framework import generics from .models import Product from .serializers import ProductSerializer class ProductListAPI(generics.ListCreateAPIView): queryset = Product.objects.all() serializer_class = ProductSerializer class ProductDetailAPI(generics.RetrieveUpdateDestroyAPIView): queryset = Product.objects.all() serializer_class = ProductSerializer部署准备
生产环境设置建议:
# settings.py DEBUG = False ALLOWED_HOSTS = ['yourdomain.com'] STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')收集静态文件:
python manage.py collectstatic性能优化技巧
- 使用
select_related和prefetch_related减少查询 - 启用缓存
- 使用 Django Debug Toolbar 分析性能
# 优化查询示例 products = Product.objects.select_related('category').prefetch_related('tags')安全最佳实践
- 使用 HTTPS
- 设置
SECRET_KEY安全 - 防范 CSRF 攻击
- 使用 Django 的内置安全中间件
# settings.py SECURE_SSL_REDIRECT = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True