您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Django基础知识学习及使用
## 目录
1. [Django简介](#1-django简介)
2. [开发环境搭建](#2-开发环境搭建)
3. [项目结构解析](#3-项目结构解析)
4. [模型(Models)](#4-模型models)
5. [视图(Views)](#5-视图views)
6. [模板(Templates)](#6-模板templates)
7. [路由(URLs)](#7-路由urls)
8. [表单处理](#8-表单处理)
9. [Admin后台管理](#9-admin后台管理)
10. [部署基础](#10-部署基础)
11. [最佳实践](#11-最佳实践)
---
## 1. Django简介
### 1.1 什么是Django
Django是一个高级Python Web框架,由Adrian Holovaty和Simon Willison于2003年开发,遵循"快速开发"和"DRY(Don't Repeat Yourself)"原则。它提供了:
- ORM(对象关系映射)
- 自动化Admin界面
- 表单处理
- 模板引擎
- 缓存系统
- 国际化支持
### 1.2 Django的特点
- **全栈框架**:包含Web开发所需的所有组件
- **开箱即用**:自带Admin、认证系统等
- **安全可靠**:自动防范CSRF、XSS等攻击
- **可扩展性强**:支持百万级流量应用
### 1.3 适用场景
- 内容管理系统(CMS)
- 社交网站
- 电子商务平台
- RESTful API服务
---
## 2. 开发环境搭建
### 2.1 基础环境准备
```bash
# 创建虚拟环境
python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate # Windows
# 安装Django
pip install django
django-admin startproject myproject
cd myproject
python manage.py runserver
访问 http://127.0.0.1:8000 查看欢迎页面
命令 | 说明 |
---|---|
startapp |
创建新应用 |
makemigrations |
生成迁移文件 |
migrate |
执行数据库迁移 |
createsuperuser |
创建管理员 |
myproject/
├── manage.py # 项目管理脚本
└── myproject/
├── __init__.py
├── settings.py # 项目配置
├── urls.py # 主路由配置
└── wsgi.py # WSGI入口
python manage.py startapp myapp
myapp/
├── migrations/ # 数据库迁移文件
├── __init__.py
├── admin.py # Admin配置
├── apps.py # 应用配置
├── models.py # 数据模型
├── tests.py # 单元测试
└── views.py # 视图函数
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey('Author', on_delete=models.CASCADE)
publish_date = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.title
字段类型 | 说明 |
---|---|
CharField |
字符串字段 |
TextField |
长文本 |
IntegerField |
整数 |
BooleanField |
布尔值 |
DateTimeField |
日期时间 |
FileField |
文件上传 |
python manage.py makemigrations
python manage.py migrate
from django.shortcuts import render
from .models import Book
def book_list(request):
books = Book.objects.all()
return render(request, 'books/list.html', {'books': books})
from django.views.generic import ListView
from .models import Book
class BookListView(ListView):
model = Book
template_name = 'books/list.html'
context_object_name = 'books'
类视图 | 说明 |
---|---|
View |
基础视图类 |
TemplateView |
模板视图 |
ListView |
列表视图 |
DetailView |
详情视图 |
CreateView |
创建视图 |
<!-- 变量输出 -->
<h1>{{ book.title }}</h1>
<!-- 循环 -->
{% for book in books %}
<p>{{ book.author }}</p>
{% endfor %}
<!-- 条件判断 -->
{% if book.price > 100 %}
<p>Expensive</p>
{% endif %}
<!-- base.html -->
<html>
<head><title>{% block title %}Default{% endblock %}</title></head>
<body>
{% block content %}{% endblock %}
</body>
</html>
<!-- child.html -->
{% extends "base.html" %}
{% block title %}Book List{% endblock %}
{% block content %}
<h1>All Books</h1>
{% endblock %}
# myproject/urls.py
from django.urls import path
from myapp import views
urlpatterns = [
path('books/', views.book_list, name='book-list'),
path('books/<int:pk>/', views.book_detail, name='book-detail'),
]
转换器 | 说明 |
---|---|
str |
匹配非空字符串 |
int |
匹配正整数 |
slug |
匹配字母、数字、连字符 |
uuid |
匹配UUID字符串 |
from django import forms
class BookForm(forms.Form):
title = forms.CharField(label='书名', max_length=100)
author = forms.CharField(label='作者', max_length=50)
price = forms.DecimalField(label='价格', min_value=0)
def book_create(request):
if request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
# 处理有效数据
return redirect('book-list')
else:
form = BookForm()
return render(request, 'books/create.html', {'form': form})
from django.contrib import admin
from .models import Book
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'price')
search_fields = ('title', 'author__name')
list_filter = ('publish_date',)
class BookAdmin(admin.ModelAdmin):
fieldsets = [
('基本信息', {'fields': ['title', 'author']}),
('销售信息', {'fields': ['price', 'stock']}),
]
# settings.py
DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com']
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
项目结构优化
性能优化
select_related
和prefetch_related
安全建议
测试策略
本文共计约5550字,涵盖了Django的核心概念和基础使用方法。实际开发中建议结合官方文档(https://docs.djangoproject.com)进行深入学习。 “`
注:实际字数可能因Markdown渲染方式略有差异。如需精确字数控制,建议在文本编辑器中检查。本文档结构完整,包含了Django开发的主要方面,可作为学习路线图使用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。