开始使用Django

开始使用Django

Python Django是一个网络框架,用于非常有效和快速地创建网络应用。Django被称为包含电池的框架,因为它包含很多内置的功能,如Django管理界面,默认数据库–SQLite3等。Django提供了各种现成的组件,如处理用户认证的方式、网站的管理面板、表单、上传文件的方式等。

在这篇文章中,我们将通过创建一个基本的博客网络应用来学习Django

为什么是Django框架?

  • Django是一个快速的网络开发框架,可以用来在短时间内开发出完整的网络应用。
  • 在Django框架中切换数据库是非常容易的。
  • 它有一个内置的管理界面,使其易于工作。
  • Django是一个功能齐全的框架,不需要其他东西。
  • 它有数以千计的额外套餐可供选择。
  • 它是非常可扩展的。

Django网络应用程序的结构

Django是基于MVT(Model-View-Template)架构。MVT是一种开发Web应用程序的软件设计模式。

  • 模型。模型将作为你的数据的接口。它负责维护数据。它是整个应用程序背后的逻辑数据结构,由一个数据库(一般是关系型数据库,如MySql、Postgres)来表示。
  • 视图。视图是用户界面–当你渲染一个网站时,你在浏览器中看到的东西。它由HTML/CSS/Javascript和Jinja文件表示。
  • 模板。模板由所需的HTML输出的静态部分以及一些描述如何插入动态内容的特殊语法组成。

开始使用Django

设置开发环境

在开始任何Django项目之前,总是建议使用一个虚拟环境,因为有时当你在多个项目上工作时,你可能需要不同版本的Django。虚拟环境为不同的项目创建了一个单独的环境,你可以分别安装每个项目的依赖项。要创建一个虚拟环境,请在终端键入以下命令

python3 -m venv <name>

这里的名称是虚拟环境的名称。我们可以给我们的环境起任何名字。让我们在创建虚拟环境时只使用venv这个名字。所以创建环境的命令将是 –

python3 -m venv venv

运行上述命令后,你会看到一个名为venv的文件夹,里面有以下子目录。

开始使用Django

创建了虚拟环境后,让我们来激活它。为了激活它,在终端键入以下命令。

source ./venv/bin/activate

注意:如果你的虚拟环境设置在另一个地方,你的终端在另一个地方打开,那么请提供venv文件夹的位置,即我们的虚拟环境文件夹。

运行上述命令后,你应该在终端的每一行的开头看到(venv),如下图所示。

开始使用Django

安装 Django

我们可以使用pip命令来安装Django。要安装它,在终端键入以下命令。

pip install django

开始使用Django

更多信息,请参考《Django介绍和安装》。

启动项目

  • 要在你的电脑上启动一个Django项目,请打开终端并输入以下命令
django-admin startproject projectName
  • 一个名为projectName的新文件夹将被创建。要使用终端进入该项目,请输入命令
cd projectName
  • 现在,让我们打开服务器,看看一切是否工作正常。要运行服务器,在终端键入以下命令。
python manage.py runserver

运行服务器后,进入http://127.0.0.1:8000/,你会看到类似这样的东西——。

开始使用Django

项目结构

一个Django项目在初始化时默认包含一些基本文件,如manage.py、view.py等。一个简单的项目结构足以创建一个单页的应用程序。下面是主要的文件和它们的解释。在 geeks_site 文件夹(project 文件夹)中,将有以下文件– 1.

开始使用Django

让我们详细讨论一下这些文件 –

manage.py:该文件用于通过命令行与你的项目进行交互(启动服务器,同步数据库…等)。为了得到manage.py可以执行的全部命令列表,请在命令窗口中输入以下代码

python manage.py help
  • init.py。它是一个Python包。当包或包中的一个模块被导入时,它被调用。我们通常用它来执行包的初始化代码,例如用于包级数据的初始化。
  • settings.py。如其名所示,它包含所有的网站设置。在这个文件中,我们注册任何我们创建的应用程序,我们的静态文件的位置,数据库配置细节,等等。
  • urls.py。在这个文件中,我们存储了项目的所有链接和要调用的函数。
  • wsgi.py。这个文件用于在WSGI中部署项目。它用于帮助你的Django应用程序与webserver进行通信。

创建应用程序

到目前为止,我们已经创建了Django项目,现在我们将创建一个应用程序。Django以其独特和完全管理的应用程序结构而闻名。对于每一个功能,都可以像一个完全独立的模块一样创建一个应用程序。要创建一个应用程序,我们需要进入包含manage.py的目录并运行以下命令

python manage.py startapp appname

现在,让我们创建一个名为post的应用程序,因此创建该应用程序的命令将是–

python manage.py startapp post

现在我们的目录看起来像这样 –

开始使用Django

为了将该项目视为我们的项目,我们需要在settings.py中的INSTALLED_APPS列表中指定项目名称——。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'post.apps.PostConfig', # our app name
]

定义模型

现在,对于帖子的应用,我们需要一些模型。Django模型是Django用来创建表、其字段和各种约束的内置功能。简而言之,Django模型就是人们使用Django的数据库的SQLSQL(结构化查询语言)很复杂,涉及很多不同的查询,用于创建、删除、更新或任何其他与数据库有关的东西。Django模型简化了这些任务,并将表组织到模型中。一般来说,每个模型映射到一个数据库表。

语法:

from django.db import models       
class ModelName(models.Model):
       field_name = models.Field(**options)

示例:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
 
class Post(models.Model):
 
    title = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    created_on = models.DateTimeField(default=timezone.now)
    last_modified = models.DateTimeField(auto_now=True)
 
    def __str__(self) -> str:
        return self.title

在上述模型中,每个字段代表SQLite数据库中的一个列。我们还为用户模型创建了一个外键。用户模型是Django .NET内置的。

注意: on_delete=models.CASCADE命令将删除一个作者的所有帖子,如果该作者的资料被删除。

每当我们创建一个模型,删除一个模型,或者在我们项目的任何models.py中更新任何东西。我们需要运行makemigrations和migrate两个命令。makemigrations基本上为预装的应用程序(可以在settings.py中的installed apps中查看)和你在installed apps中添加的新创建的应用程序模型生成SQL命令,而migrate在数据库文件中执行这些SQL命令。

因此,当我们运行时。

python manage.py makemigrations

创建上述模型的SQL查询,作为一个表被创建。我们可以在migrations文件夹下看到0001_initial.py的内容。

开始使用Django

要在数据库中创建表,请输入

python manage.py migrate

现在我们已经创建了一个模型,我们可以执行各种操作,比如为表创建一个行,或者就Django而言,创建一个模型的实例。要了解更多,请访问 – Django基本应用模型 – Makemigrations和Migrate 。

Django管理中的渲染模型

在创建模型后,我们需要向我们的模型添加数据。我们可以通过两种方式添加数据。这两种方式是–

  • Django Shell
  • Django Admin

在这篇文章中,我们将重点讨论通过管理界面渲染模型数据。如果你想学习通过Django Shell渲染数据,请参考Django ORM – 插入、更新和删除数据。

我们需要为我们的网络应用程序创建一个超级用户,以便访问管理面板。要创建一个超级用户,请在终端键入以下命令 –

python manage.py createsuperuser

开始使用Django

现在在浏览器上进入http://127.0.0.1:8000/admin,进入管理界面面板。

开始使用Django

给予为超级用户创建的用户名和密码,然后管理仪表板将打开。

开始使用Django

为了将我们的模型渲染到我们的管理面板上,我们需要对post/admin.py文件进行修改。在admin.py文件中输入以下代码 —

from django.contrib import admin
from .models import Post
 
# Register your models here.
admin.site.register(Post)

刷新你的管理面板将让你看到我们创建的模型。

开始使用Django

注意:更多信息请参考Django管理界面中的Render Model。

让我们向我们的数据库添加一些数据。点击Geeks模型,我们会看到这样的东西—

开始使用Django

我们可以点击右上角的添加帖子按钮,然后就能看到添加数据的字段。请看下面的图片 –

开始使用Django

在添加了所需的数据后,我们将在我们的管理仪表板上看到像这样的东西 —

开始使用Django

Django 视图

在创建和添加数据到我们的模型后,我们需要向我们的网站显示数据。渲染数据是一个两步的过程。首先,我们需要创建我们的视图函数,然后我们需要将数据传递给我们的模板。在这里,我们将专注于视图函数。

视图函数是一个 Python 函数,它接收一个 Web 请求并返回一个 Web 响应。这个响应可以是一个网页的HTML内容,或者是一个重定向,或者是一个404错误,或者是一个XML文档,或者是一个图片,任何网络浏览器可以显示的东西。Django视图是用户界面的一部分–它们通常将模板文件中的HTML/CSS/Javascript渲染成你在浏览器中看到的网页。

开始使用Django

首先,让我们创建一个样本视图函数,它将简单地显示正常的HTML内容。

from django.http import HttpResponse
 
# create a function
def home(request):
     
    return HttpResponse("<h1>Welcome to GeeksforGeeks</h1>")

让我们一行一行地浏览这段代码。

  • 首先,我们从 django.http 模块中导入 HttpResponse 类,以及 Python 的日期时间库。
  • 接下来,我们定义一个名为home的函数。这就是视图函数。每个视图函数都需要一个HttpRequest对象作为它的第一个参数,它通常被命名为request。
  • 视图返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。

上述函数将在页面上以h1的形式呈现欢迎来到GeeksforGeeks的文字。现在可能出现的问题是,这个函数将在哪个URL被调用,我们将如何处理这些URL。别担心,我们会在本节中处理URL,但在本节中,让我们继续讨论Django视图。

视图的类型

Django视图分为两大类:-

  • 基于函数的视图
  • 基于类的视图

开始使用Django

基于函数的视图

基于函数的视图是使用python中的一个函数编写的,它接收一个参数HttpRequest对象并返回一个HttpResponse对象。基于函数的视图一般分为4种基本策略,即CRUD(创建、检索、更新、删除)。CRUD是人们在开发时使用的任何框架的基础。我们上面创建的是一个基于函数的基于类的视图

基于类的视图

基于类的视图提供了一种将视图作为Python对象而不是函数来实现的替代方法。它们并不取代基于函数的视图,但与基于函数的视图相比,有一定的区别和优势。

  • 与特定HTTP方法(GET、POST等)相关的代码组织可以通过单独的方法来解决,而不是条件分支。
  • 面向对象的技术,如mixins(多重继承),可用于将代码分解成可重用的组件。 视图。

Django URL模式

在Django中,每个视图都需要被映射到一个相应的URL模式。这是通过一个叫做URLConf(URL配置)的Python模块完成的。每个URLConf模块都必须包含一个变量urlpatterns,它是一组与请求的URL匹配的URL模式。这些模式将被依次检查,直到找到第一个匹配。然后调用与第一个匹配项对应的视图。如果没有匹配的URL模式,Django会调用一个适当的错误处理视图。

现在,如果我们看到我们的项目,我们已经创建了一个名为 gfg_site 的应用程序,作为 URLConf 的 Python 模块是 gfg_site/settings.py 中 ROOT_URLCONF 的值。默认情况下,它被设置为 “gfg_site.urls”。每个 URLConf 模块都必须包含一个变量 urlpatterns,它是一组要与请求的 URL 进行匹配的 URL 模式。这些模式将被依次检查,直到找到第一个匹配。然后调用与第一个匹配项对应的视图。如果没有匹配的URL模式,Django会调用一个适当的错误处理视图。

下面是post/urls.py的示例代码。

from django.urls import path
from . import views
 
urlpatterns = [
    path('', views.home, name='home'),
]

包括其他URLConf模块

在Django中,为每个应用程序设置一个URLConf模块是一个好的做法。这个模块需要包含在根URLConf模块中,如下所示。

from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('post.urls'))
]

现在,如果朝向http://127.0.0.1:8000/,那么我们的网站将是–。

开始使用Django

在上面的例子中,include语句将查找gfg_site_app/urls.py中的URLpatterns列表,然后它将查找url.py文件中定义的所有路径,并调用各自的view函数。

Django 模板

模板是Django的MVT结构的第三部分,也是最重要的部分。Django中的模板基本上是用HTML、CSS和Javascript写在一个.html文件中。Django框架有效地处理和生成动态的HTML网页,让终端用户看到。Django的功能主要是后端,所以,为了提供一个前端,为我们的网站提供一个布局,我们使用模板。根据我们的需要,有两种方法可以将模板添加到我们的网站上。

  • 我们可以使用一个单一的模板目录,它将分布在整个项目中。
  • 对于我们项目的每个应用,我们可以创建一个不同的模板目录。

对于我们目前的项目,为了简单起见,我们将创建一个单一的模板目录,它将分布在整个项目中。应用程序级的模板一般用于大项目,或者在我们想为网页的每个组件提供不同的布局时使用。

现在让我们创建模板目录并将该目录添加到我们的settings.py文件中。

开始使用Django

将这个模板文件夹添加到我们的settings.py文件中 —

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
       
        # adding template folder that we just created
        'DIRS': [BASE_DIR/'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

在添加了模板目录的位置后,我们将创建一个简单的HTML文件,并将其命名为home.html,然后我们将通过视图函数渲染这个文件。

HTML file:

<h1>Welcome to GeeksforGeeks</h1>

为了在我们的网站上渲染这个HTML,我们需要使用django.shortcuts中的render函数。下面是更新后的视图函数。

views.py

from django.http import HttpResponse
from django.shortcuts import render
 
def home(request):
 
    context = {}
    return render(request, 'home.html', context)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Django 教程