django, web development,

用Django框架做一个Hello World模板网页

DolorHunter DolorHunter Follow Aug 16, 2020 · 3 mins read
用Django框架做一个Hello World模板网页
Share this

Django 是一个用 Python 编写的开源Web框架, 类似于 Spring 框架, 都可以用来开发网页. 很多热门的软件也都是使用 Django 框架开发的, 例如 Pinterest, Instagram, Udemy, Robinhood, Coursera, Accenture 等等, 在业界使用度还是不低的.

安装与配置

首先, Django 是在 Python 环境下运行的, 因此我们下载需要 Python(下载时勾选环境变量就不用自己配置了). 之后再使用 Python 内的 pip 工具下载 Django 库.

$ python -m pip install Django

数据库我们可以使用 Django 内自带的 SQLite3. 如果要使用其他的数据库, 应该也是可以的, 请自行搜索如何安装.

创建一个 Django 项目 (Project)

如果你的 IDE 内有 Django项目的选项, 直接选择创建就行.

如果没有的话, 先创建一个文件夹作为项目的目录, 使用 CMD 或 PWSH 进入该目录.

在此目录下创建 Django 项目 (. 表示当前文件夹)

$ django-admin startproject MYPEOJECT .

我们可以运行服务来测试一下项目是否创建成功

$ python manage.py runserver

运行服务后会显示以下内容. 其中包括了一个地址, 我们进入该地址

PS C:\Users\ultrabook\Desktop\MYPROJECT> python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
August 08, 2020 - 19:01:20
Django version 3.0.8, using settings 'MYPEOJECT.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

进入地址后会显示如下页面, 就表示你已经创建成功了.

Django

创建项目内的应用 (App)

当前的文件结构大概长这样, 其中db.sqlite3 就是 Django 内自带的 SQLite3(默认无用户名和密码), 我们可以通过数据库工具如Navicat Premium 来查看内容.

MYPROJECT
├ MYPROJECT
│ ├ __pycache__
│ ├ __init__.py
│ ├ asgi.py
│ ├ settings.py
│ ├ urls.py
│ └ wsgi.py
├ db.sqlite3
└manage.py

在 Django 的世界里, 有 Project 和 App 之分, 一个Project 内可以有一个或多个的App. 每个 App 专注于自己特定的功能(权限, 交易, etc). 从文件结构上来说, App 和 Project 的目录是同级的.

我们在根目录下, 创建应用 MYAPP

$ python manage.py startapp MYAPP

现在的文件结构就长这样, MYAPP 内的文件与 MYPROJECT 不太相同.

MYPROJECT
├ MYPROJECT
│ ├ __pycache__
│ ├ __init__.py
│ ├ asgi.py
│ ├ settings.py
│ ├ urls.py
│ └ wsgi.py
│
├ MYAPP
│ ├ migreations
│ ├ __init__.py
│ ├ apps.py
│ ├ models.py
│ ├ tests.py
│ └ view.py
├ db.sqlite3
└manage.py

我们在 MYPROJECT/settings.py 中的 INSTALLED_APPS 段手动加入新添加的 MYAPP 应用.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'MYAPP',
]

创建应用内功能 (view)

之后, 我们要在 MYAPP 中添加功能. 在 MYAPP/view.py 中写入

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

def my_view(request):
  return HttpResponse('Hello World!')

在创建好功能后, 我们还要给功能指定一个地址. 进入 MYPROJECT/urls.py, 给 my_view 创建一个地址(记得写 import). 写完长这样

from django.contrib import admin
from django.urls import path
from MYAPP.views import my_view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('helloworld/', my_view),
]

然后我们进入 127.0.0.1:8000/helloworld/, 就会显示 my_view 内的功能 “Hello World!”.

Hello World

网页服务不用重新编译启动服务, 做了修改后只有刷新一下浏览器就行了.

创建一个网页文件 (.html file)

当然, 上面 HttpResponse(‘Hello World!’) 只是一个示例, 真正的网页通常还是会写在一个单独的 .html 文件中的. 我们可以依照逻辑选择在根目录下或是应用目录下(例如MYAPP), 创建一个名为 templates 的文件夹存放 .html 文件.

比如, 在根目录下创建一个 templates 目录, 里面有一个名为 myhtml.html的文件. 这里也是先写个 “Hello World!”.

Hello World!

我们回到 MYAPP/view.py 中, 把 my_view 修改一下

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

def my_view(request):
  return render(request, 'myhtml.html')

当然, 我们还要在 MYPROJECT/settings.py 中的 TEMPLATES 段加上模板的目录

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(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',
            ],
        },
    },
]

然后, 我们进入 127.0.0.1:8000/helloworld/ 查看网页, 就会显示 .html 内的功能 “Hello World!”.

Hello World

一个简单的用 Django 框架搭建的 Hello World 网页模板就完成了.

参考资料:

Join Newsletter
Get the latest news right in your inbox. We never spam!
DolorHunter
Written by DolorHunter
Developer & Independenet Blogger