掘金 后端 ( ) • 2024-04-29 09:57
web

Django

Django是一个高级的、使用Python语言编写的开源Web框架,旨在快速开发安全和可维护的网站。它遵循模型-视图-模板(MVT)的设计模式,类似于模型-视图-控制器(MVC)模式。

Django是开发Web应用的热门选择,适用于从小型项目到大型企业级系统的开发。

MVT

  • M:Model 模型层
  • T:Template 页面模版
  • V:View 视图层

数据处理顺序

⽤户请求 --> URL 控制器 --> view 视图 --> Model 模型 --> Template 模版 --> 返回 HTML

官方文档

https://www.djangoproject.com/start/

准备

安装python环境,包含pip等。

这个是python的下载地址:https://www.python.org/downloads/

如果下载的免安装版本没有pip,单独安装下pip,可以查询其它资料如何安装。

示例环境如下:

Python 3.11.8
pip 24.0 from E:\python-3.11.8\Lib\site-packages\pip (python 3.11)

IDE,我用的是PyCharm 2023.1.2版本,使用其它ide的仅供参考。

创建工程

安装django

pip3 install django

我的电脑上pip3和pip命令是同一个版本。

下面,我以创建一个名字叫what_to_eat的项目为例,进行演示。

如果以后中午不知道吃什么,就使用这个项目来选择。

创建项目

django-admin startproject what_to_eat

项目名称不能用中划线,我做java的,习惯了中划线,不让用还挺不习惯。

image.png

创建应⽤

cd what_to_eat
python3 manage.py startapp what_to_eat

运⾏Django

python3 manage.py runserver 8080

如果在windows的命令行运行没反应,也可以下面这个样子:

image.png

访问:http://localhost:8080/

image.png

开发

用pycharm打开

image.png

打开的时候,看见右下角有个配置一个python解释器的提示,我们配置一下,并且要创建一个虚拟环境。

为什么要虚拟环境,主要是以下几点:

  1. 避免依赖冲突
  2. 环境一致性
  3. 开发与系统环境分离
  4. 易于管理
  5. 可移植性

image.png

也可以选择其它几个。

增加完,idea会自动生成这个:

image.png

同样也可以运行项目了:

image.png

再创建个app

image.png

增加一个views.py, 返回一个index.html:

image.png

增加一个index.html页面,先创建一个templates目录:

image.png index.html的内容如下:

{% load bootstrap4 %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>吃什么呀</title>
        {% bootstrap_css %}
        {% bootstrap_javascript %}
    <style>

        .v-center {
            padding-top: 15%;
        }

        @keyframes blink {
            0%, 100% {
                opacity: 1;
                color: black;
            }
            50% {
                opacity: 0;
                color: red;
            }
        }

        .text-flashing {
            animation: blink 1s ease-in-out infinite;
        }

        p {
            font-size: 50px;
        }
    </style>
</head>

<body>
<div class="d-flex flex-column align-items-center v-center">
    <p class="text-flashing">
        点击下方按钮进行选择
    </p>

    <!-- 随机选择链接 -->
    <a href="random" class="btn btn-primary mb-2">随机选择</a>

    <!-- AI推断链接 -->
    <a href="ai" class="btn btn-secondary">AI推断</a>
</div>

</body>

修改settings.py,设置模板目录:

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

引入bootstrap,还是setting.py里修改:

image.png 安装依赖:

image.png

修改urls.py,访问根路径的时候返回index.html:

image.png

这里已经返回了一个页面,可以启动项目看下效果

image.png

部署

导出依赖列表

pip freeze > requirements.txt

image.png

上传服务器

将项目打包部署上传到服务器(打个干净点的压缩包):

image.png

安装虚拟环境

我的服务器上已经装了virtualenv,如果没有安装的可以使用如下命令安装:

pip install virtualenv

也可以使用其它方式创建虚拟环境,方式多样,不一定用这种。

进入解压后的目录:

image.png

创建虚拟环境

virtualenv venv

image.png

创建完成可以看一个venv目录。

激活环境

source venv/bin/activate

image.png

安装依赖

 pip install -r requirements.txt 

安装完成后,运行项目:

python3 manage.py runserver 0.0.0.0:13005

image.png

然后就可以访问了,如果通过互联网访问被拒绝了,就修改settings.py,如下配置:

image.png

如果需要后台运行就使用nohup命令。

取消虚拟环境,执行如下命令:

deactivate

完整项目地址

已提交gitee: https://gitee.com/xiaodong_xu/what_to_eat