目录
一、Django简介
Django是一个基于Python的高级Web框架,遵循“快速开发”和“DRY(Don’t Repeat Yourself)”原则。最初为新闻网站设计,现广泛用于构建各类Web应用。其核心特点包括:
-
高效开发:内置ORM、模板引擎、路由系统等,减少重复代码。
-
安全性:自动防御SQL注入、XSS等常见攻击。
-
扩展性:支持中间件、信号等机制,灵活适应复杂需求。
二、MTV设计模式
Django采用MTV(Model-Template-View)模式,与MVC类似但略有差异:
-
Model:定义数据结构,与数据库交互(对应MVC的Model)。
-
Template:负责页面渲染(对应MVC的View)。
-
View:处理业务逻辑(对应MVC的Controller)。
三、安装与配置
1. 安装Django
# 使用pip安装指定版本
pip install Django==1.10
# 或克隆最新版本
git clone https://github.com/django/django.git
2. 创建项目与启动服务
# 创建项目
django-admin startproject mysite
# 启动开发服务器
python manage.py runserver # 默认端口8000
python manage.py runserver 8080 # 指定端口
3. 目录结构
mysite/
├── manage.py # 项目管理工具
└── mysite/
├── __init__.py
├── settings.py # 全局配置(数据库、静态文件等)
├── urls.py # URL路由
└── wsgi.py # Web服务器入口
4. 数据库配置(以MySQL为例)
在settings.py
中修改:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbname',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': 'localhost',
'PORT': '3306',
}
}
四、路由系统
Django的路由系统通过urls.py
定义URL与视图的映射关系。
1. 基础路由
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive), # 位置参数
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), # 命名参数
]
2. 二级路由
# 主路由
urlpatterns = [
url(r'^app1/', include('app1.urls')),
]
# 子路由(app1/urls.py)
urlpatterns = [
url(r'^1/$', views.manage1),
]
五、视图与模板
1. 视图函数
from django.shortcuts import render, HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
return render(request, 'current_datetime.html', {'current_date': now})
2. 模板语法
<!-- 显示变量 -->
{{ current_date }}
<!-- 循环与条件 -->
{% for item in item_list %}
{% if forloop.first %}<li>First: {% else %}<li>{% endif %}
{{ item }}
{% endfor %}
3. 自定义模板标签
# 在templatetags/xx.py中定义
from django import template
register = template.Library()
@register.simple_tag
def my_tag(v1, v2):
return v1 + v2
# 模板中使用
{% load xx %}
{% my_tag 1 2 %}
六、模型与数据库
1. 定义模型
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
age = models.IntegerField(default=0)
2. 数据库操作
# 增
Person.objects.create(first_name='John', last_name='Doe')
# 查
users = Person.objects.filter(age__gt=20) # 年龄大于20
# 改
Person.objects.filter(id=1).update(age=25)
# 删
Person.objects.filter(id=1).delete()
3. 关联表
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
七、用户认证与安全
1. 用户认证
from django.contrib.auth import authenticate, login
def login_view(request):
user = authenticate(username=request.POST['username'], password=request.POST['password'])
if user:
login(request, user)
return redirect('/dashboard/')
2. CSRF防护
在表单或AJAX请求中添加CSRF Token:
<form method="post">
{% csrf_token %}
<input type="text" name="username">
</form>
<!-- AJAX示例 -->
<script>
$.ajax({
headers: {'X-CSRFToken': '{{ csrf_token }}'},
url: "/submit/",
type: "POST",
});
</script>
八、高级功能
1. 分页
from django.core.paginator import Paginator
def article_list(request):
articles = Article.objects.all()
paginator = Paginator(articles, 10) # 每页10条
page = request.GET.get('page')
return render(request, 'list.html', {'articles': paginator.get_page(page)})
2. 缓存
# 视图缓存
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 缓存15分钟
def my_view(request):
...
3. 信号(Signals)
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def user_created(sender, instance, **kwargs):
print(f"用户 {instance.username} 已创建!")
九、Admin后台管理
1. 注册模型
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'publish_date')
search_fields = ('title', 'content')
list_filter = ('publish_date',)
2. 自定义Admin界面
class UserAdmin(admin.ModelAdmin):
fieldsets = [
('基本信息', {'fields': ['username', 'email']}),
('权限', {'fields': ['is_staff']}),
]
总结
Django凭借其“开箱即用”的特性,成为快速开发高质量Web应用的首选框架。通过本文的全面指南,您可以掌握从基础配置到高级功能的核心知识。如需进一步探索,建议参考官方文档或实战项目练习。(๑•̀ㅂ•́)و 🏆