Django框架基础 Django,一个由Python编写的开源Web框架,以其“ batteries included ”的理念,为开发者提供了丰富的功能,让构建高效、安全的Web应用程序变得简单。它遵循MVT(Model-View-Template)设计模式,这是一种用于构建Web应用的结构化方式。

模型(Model) 在Django中,模型是数据的蓝图,定义了数据库表的结构。通过继承Django的models.Model类,你可以创建自定义字段,如CharField(字符串)、IntegerField(整数)、DateTimeField(日期和时间)等。例如:


from django.db import models

class Event(models.Model):

    title = models.CharField(max_length=255)

    description = models.TextField()

    start_time = models.DateTimeField()

    end_time = models.DateTimeField()

这将创建一个名为Event的数据库表,包含titledescriptionstart_timeend_time字段。

视图(View) 视图是处理用户请求并返回响应的部分。它们可以是简单的函数或复杂的类,根据URL配置来调用。视图通常负责获取数据、处理逻辑,并将数据传递给模板进行渲染。例如,展示所有事件的视图可能如下所示:


from django.shortcuts import render

from .models import Event

def event_list(request):

    events = Event.objects.all()

    return render(request, 'event_list.html', {'events': events})

模板(Template) 模板是HTML文件,其中包含Django模板语言(DTL)的标记,用于动态渲染内容。这些标记允许你插入变量、控制流、过滤器等,以生成动态HTML。比如,event_list.html模板可能会这样设计:


<!DOCTYPE html>



<html lang='\"zh\"'>

<head>

    <meta charset="utf-8"/>

    <title>活动议程</title>

</head>

<body>

    <h1>活动列表</h1>

    <ul>

        {% for event in events %}

            <li>{{ event.title }} - {{ event.start_time }}</li>

        {% empty %}

            <li>暂无活动</li>

        {% endfor %}

    </ul>

</body>

</html>

URL配置 Django的URL配置系统允许你将URL模式映射到视图函数。在urls.py文件中,你可以定义URL模式和对应的视图:


from django.urls import path

from . import views

urlpatterns = [

    path('events/', views.event_list, name='event_list'),

]

这个配置意味着访问/events/时,Django将调用views.event_list视图。

表单(Forms) Django的表单系统简化了用户输入数据的处理。你可以定义表单类,基于模型或自定义字段集,然后在视图中使用它们。例如:


from django import forms

from .models import Event

class EventForm(forms.ModelForm):

    class Meta:

        model = Event

        fields = ['title', 'description', 'start_time', 'end_time']

然后在视图中使用这个表单来处理POST请求,并验证用户提交的数据。

管理站点(Admin site) Django的内置管理站点提供了一个方便的后台界面,用于管理数据库中的模型。只需在admin.py中注册你的模型,就能立即获得一个功能齐全的CRUD(创建、读取、更新、删除)界面:


from django.contrib import admin

from .models import Event

admin.site.register(Event)