📜  由 django 创建和更新 - Python (1)

📅  最后修改于: 2023-12-03 15:40:56.257000             🧑  作者: Mango

由 Django 创建和更新 - Python

Django 是一个基于 Python 的高级 Web 框架,它以快速开发和干净设计为优势,使得 Web 开发者能够专注于编写应用程序而不是编写一些通用的代码。这篇文章将会涵盖如何使用 Django 来创建和更新一个 Web 应用程序。

创建项目

首先,我们需要创建一个项目。打开终端并输入以下命令:

$ django-admin startproject myproject

这将创建一个名为 myproject 的 Django 项目。这个命令将在当前目录下创建一个包含以下文件的目录:

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

这个 myproject 目录包含了一个 Django 项目的所有必要文件。 manage.py 文件是我们与 Django 交互的命令行工具。我们将使用它来启动 Web 服务器、创建数据库、运行单元测试等。

settings.py 文件包含了 Django 的项目设置,其中包括数据库配置、静态文件路径、安装的应用程序等。

urls.py 文件是整个应用程序的 URL 配置文件。它将告诉 Django 如何将 URL 映射到视图函数。

创建应用

在一个 Django 项目中,我们可以创建多个应用程序来组织和拆分代码。每个应用程序应该处理项目中的一个特定部分。现在我们来创建一个应用程序来处理用户注册和登录。

在终端中进入 myproject 目录并运行以下命令:

$ python manage.py startapp account

这将在 myproject 目录下创建一个 account 应用程序目录,其中包含以下文件:

account/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py
    migrations/
        __init__.py

views.py 文件中包含视图函数,用于响应 URL 请求。在 account/views.py 中创建以下函数:

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("Welcome to account app")

这个函数接受一个 request 参数并返回一个 HttpResponse 对象。它将在应用程序首页显示欢迎信息。

account/urls.py 文件中创建以下代码:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

这里我们导入了 path 函数和 views 模块。然后创建了一个 URL 映射,将 '' URL 映射到 views.index 视图函数。

最后,我们需要将我们创建的 URL 映射添加到我们的项目 URL 映射中。在 myproject/urls.py 文件中导入 include 函数,这个函数可以将一个应用的 URL 映射添加到项目的 URL 映射中。然后将以下代码添加到 urlpatterns 列表中:

from django.urls import include, path

urlpatterns = [
    path('account/', include('account.urls')),
]

现在我们已经创建了一个简单的应用程序: account,可以通过 http://127.0.0.1:8000/account/ 访问。

创建模型

Django 为我们提供了一个强大的 ORM(对象关系映射)来操作数据库。我们可以定义模型来代表一个数据库表,并使用 Django 的 ORM 来查询、创建、修改和删除表节点。

account/models.py 中创建以下模型:

from django.db import models
from django.contrib.auth.models import AbstractBaseUser

class Account(AbstractBaseUser):
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=30, unique=True)
    name = models.CharField(max_length=100)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'name']

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin

我们定义了一个 Account 模型,并继承了 Django 内置的 AbstractBaseUser 类,使得我们可以使用该模型管理用户身份验证信息。该模型包含 email、username、name、date_joined、is_active 和 is_admin 属性,其中 emailusername 是唯一的,date_joined 设为自动设置,is_activeis_admin 分别表示用户是否激活和是否是管理员。

除了这些属性外,我们还定义了一些方法,包括 __str__has_permhas_module_permsis_staff。这些方法支持 Django 内置的认证系统。如果您想了解更多,可以查看 Django 的 官方文档

注意,我们还定义了 USERNAME_FIELD 属性和 REQUIRED_FIELDS 属性。USERNAME_FIELD 属性用于指定用户登录时使用的字段名,这里我们选择了 email,而不是默认的 usernameREQUIRED_FIELDS 属性是一个必须包含的字段列表,用于创建超级用户时。

接下来我们需要在数据库中创建该模型的表。在终端中运行以下命令:

$ python manage.py makemigrations account
$ python manage.py migrate

这将创建一个新的数据库迁移文件,并将其应用到数据库中。

创建表单

现在我们已经可以使用模型管理应用程序中的数据,但我们还没有确定如何向数据库添加数据。我们可以创建一个表单类,它允许我们通过一个 Web 表单来添加数据。Django 内置了一些表单类,我们可以继承他们并根据需要进行修改。

account/forms.py 中创建以下代码:

from django.contrib.auth.forms import UserCreationForm
from django import forms
from .models import Account

class SignupForm(UserCreationForm):
    email = forms.EmailField(max_length=254, required=True, widget=forms.EmailInput())
    username = forms.CharField(max_length=30, required=True, widget=forms.TextInput())
    name = forms.CharField(max_length=100, required=True, widget=forms.TextInput())

    class Meta:
        model = Account
        fields = ('email', 'username', 'name', 'password1', 'password2')

在这个表单中,我们首先从 Django 内置的 UserCreationForm 类继承。然后我们添加了几个字段,包括 emailusernamename。这个表单类允许用户注册一个新的帐户。

Meta 类包含一个 model 属性,该属性指定了关联此表单类的模型。

编写视图

视图是响应 URL 请求的函数。视图接受一个 HTTP 请求并返回一个 HTTP 响应。

account/views.py 中添加以下代码:

from django.shortcuts import render, redirect
from .forms import SignupForm

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = SignupForm()
    return render(request, 'account/signup.html', {'form': form})

该视图函数接受一个请求,并根据请求方法返回一个模板呈现的表单或处理表单提交并重定向到首页。

创建模板

Django 使用模板系统生成 HTML 输出。模板包含静态内容和动态内容,这些内容在渲染模板时将使用上下文中提供的数据进行替换。

account/templates/account 目录下创建一个名为 signup.html 的文件,这个文件将呈现一个注册表单:

{% extends 'base.html' %}

{% block content %}
  <h2>Register an account</h2>
  <form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Register</button>
  </form>
{% endblock %}

在这个模板中,我们使用了 {% extends 'base.html' %} 将模板继承自基础模板。我们还使用 {% csrf_token %} 标记来保护表单免受跨站请求伪造攻击。

创建状态路由

现在我们已经构建了注册表单、视图函数和模板,但是我们还没有创建 URL 映射来将视图函数与 URL 关联。在 account/urls.py 中添加以下路由:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('signup/', views.signup, name='signup'),
]

这里我们使用了 signup/ URL 映射到 signup 视图函数。

运行服务器

现在我们准备好运行 Django 服务器并查看我们的应用了。在终端中进入 myproject 目录并运行以下命令:

$ python manage.py runserver

这个命令将启动 Django Web 服务器,并将应用程序提供给浏览器。在浏览器中访问 http://127.0.0.1:8000/account/signup,可以看到我们的注册表单。

您可以在表单中填写所需字段,并单击注册按钮。这将向数据库中添加一个新帐户,并将您重定向到应用程序的索引页面。

结论

在本文中,我们介绍了如何使用 Django 创建和更新一个 Web 应用程序。我们学习了如何创建项目和应用程序、创建一个数据库模型、编写表单、编写视图和创建 URL 映射。使用 Django,您可以轻松地构建高效、可扩展和易于维护的 Web 应用程序。