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 django
Django 项目结构解析
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.js
REST 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

1395

被折叠的 条评论
为什么被折叠?



