Django新建项目

1.cmd命令行设置python环境

环境中存在多个python版本时,需要选定特定版本建立独立的python环境。

把python3.6程序文件夹中的python.exe改为python3.6;把python3.8程序文件夹中的python.exe改为python3.8;

在cmd中需要使用什么版本就在原python命令加上版本号,

python -m venv web-venv #原命令行执行创建web-env的虚拟环境
python3.6 -m venv web-venv #使用3.6版本python命令行执行创建web-env的虚拟环境
python3.8 -m venv web-venv #使用3.8版本python命令行执行创建web-env的虚拟环境

根据以上命令执行创建好需要的python环境后,在激活创建好的python环境:

web-venv\Scripts\activate.bat

命令行会出现一个前缀(web-env) C:\Users\ .. \ 。代表已成功创建激活python虚拟环境

2.安装更新依赖包

升级pip,从此步开始所有的命令均是在虚拟环境中进行,新创建的虚拟环境自带的pip通常不是最新的版本。在运行pip命令时,会有警告,故而先升级pip,国内访问外网不稳定,以下命令使用阿里源进行下载。以下基于python3.6环境

python -m pip install --upgrade pip setuptools -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

3.安装Django

python -m pip install Django #一般速度相对比较慢
python -m pip install Django==2.1.* -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com #使用国内镜像源速度比较快

在python -m pip install Django中,后面可以添加想要指定下载的版本Django==2.2。不加则默认下载最新版本。

4.安装项目依赖

如果导入的是现有的django项目,在项目的文件夹中一般都会有‘requirements.txt’的文件夹,里面罗列的该项目所需要的的插件依赖包,只需要执行该文件即可安装该项目的所需要的全部插件依赖

pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com # 前段是执行文件罗列需要安装的文件,后半段是使用国内镜像源下载所需的插件依赖

5.本地运行Django

python manage.py runserver

6.如果是新的项目需新建项目app应用

输入python manage.py startapp web_app指令,创建名为web_app的app:

目录结构如下

my_blog
│  db.sqlite3
│  manage.py
│
├─web_app
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tests.py
│  │  views.py
│  │  __init__.py
│  │
│  └─migrations
│        └─ __init__.py
│
└─my_blog
    │  settings.py
    │  urls.py
    │  wsgi.py
    └─ __init__.py

项目结构分解如下:

  • 根目录my_blog下有两个文件:db.sqlite3是一个轻量级的数据库文件,用来存储项目产生的数据,比如博客文章;manage.py是项目执行命令的入口,比如runserver。
  • 目录web_app是刚创建出来的app,用来放置博客文章相关的代码:后台管理文件admin.py,数据模型文件models.py,视图文件views.py,存放数据迁移文件的目录migrations
  • 根目录下还有一个my_blog目录,其中的settings.py包含项目的配置参数,urls.py则是项目的根路由文件。

1)注册app到项目(settings)

接着我们需要修改项目配置文件,“告诉”Django现在有article这么一个app了。

打开my_blog目录的settings.py,找到INSTALLED_APPS写入如下代码:

my_blog/settings.py

INSTALLED_APPS = [
    # 其他代码
    ...

    # 新增'article'代码,激活app
    'web_app',
]

2)设置访问路径(urls)

然后再给app配置访问路径url。

url可以理解为访问网站时输入的网址链接,配置好url后Django才知道怎样定位app。

打开my_blog目录下的urls.py,增加以下代码:

my_blog/urls.py

from django.contrib import admin
# 记得引入include
from django.urls import path, include

# 存放映射关系的列表
urlpatterns = [
    path('admin/', admin.site.urls),

    # 新增代码,配置app的url
    path('web_app/', include('web_app.urls', namespace='web_app')),
    #当设置为:path('', include('web_app.urls', namespace='web_app')),时,直接一级域名路径就可以访问
]

path为Django的路由语法:

  • 参数web_app/分配了app的访问路径;
  • include将路径分发给下一步处理;
  • namespace可以保证反查到唯一的url,即使不同的app使用了相同的url(后面会用到)。

记得在顶部引入include

在开发环境下,article的url为:http://127.0.0.1:8000/web_app/

还没结束。现在我们已经通过path将根路径为web_app的访问都分发给web_app这个app去处理。但是app通常有多个页面地址,因此还需要app自己也有一个路由分发,也就是web_app.urls`了。

web_app可以有多个页面,如列表页面、详情页面等,那么就需要如下两个url:

http://127.0.0.1:8000/web_app/list/

http://127.0.0.1:8000/web_app/detail/

app 中的 urls.py 就是用来区分它们的。

在app生成时并没有这个文件,因此需要自己在web_app文件夹中创建urls.py,在里面输入:

web_app/urls.py

# 引入path
from django.urls import path

# 正在部署的应用的名称
app_name = 'web_app'

urlpatterns = [
    # 目前还没有urls
]

urlpatterns中暂时是空的,没写入任何路径的映射,不着急以后会写。

此时我们的app就配置完成了。

注意此时app还没有写好,因此启动服务器可能会报错,是正常的。

Django2.0之后,app的urls.py必须配置app_name,否则会报错。

7.编写博客文章的Model模型

Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。

它们各自的职责如下:

层次职责
模型(Model),即数据存取层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
模板(Template),即业务逻辑层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
视图(View),即表现层存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

简单来说就是Model存取数据,View决定需要调取哪些数据,而Template则负责将调取出的数据以合理的方式展现出来。

1)编写Model.py

如前面所讲,Django中通过模型(Model)映射到数据库,处理与数据相关的事务。

对博客网站来说,最重要的数据就是文章。所以首先来建立一个存放文章的数据模型。

打开web_app/models.py文件,输入如下代码:

web_app/models.py

from django.db import models
# 导入内建的User模型。
from django.contrib.auth.models import User
# timezone 用于处理时间相关事务。
from django.utils import timezone

# 博客文章数据模型
class ArticlePost(models.Model):
    # 文章作者。参数 on_delete 用于指定数据删除的方式
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    # 文章标题。models.CharField 为字符串字段,用于保存较短的字符串,比如标题
    title = models.CharField(max_length=100)

    # 文章正文。保存大量文本使用 TextField
    body = models.TextField()

    # 文章创建时间。参数 default=timezone.now 指定其在创建数据时将默认写入当前的时间
    created = models.DateTimeField(default=timezone.now)

    # 文章更新时间。参数 auto_now=True 指定每次数据更新时自动写入当前时间
    updated = models.DateTimeField(auto_now=True)
    
    # 内部类 class Meta 用于给 model 定义元数据
class Meta:
    # ordering 指定模型返回的数据的排列顺序
    # '-created' 表明数据应该以倒序排列
    ordering = ('-created',)

    # 函数 __str__ 定义当调用对象的 str() 方法时的返回值内容
def __str__(self):
    # return self.title 将文章标题返回
    return self.title

2)数据迁移(Migrations)

编写好了Model后,接下来就需要进行数据迁移。迁移是Django对模型所做的更改传递到数据库中的方式。

注意,每当对数据库进行了更改(添加、修改、删除等)操作,都需要进行数据迁移。

① 输入python manage.py makemigrations,对模型的更改创建新的迁移表:

②然后输入python manage.py migrate应用迁移到数据库中

再重复一次:每当你修改了models.py文件,都需要用makemigrationsmigrate这两条指令迁移数据。

在迁移之后,Model的编写就算完成了。

8.View视图初探

9.创建后台账号

10.

最后修改:2020 年 12 月 28 日
如果觉得我的文章对你有用,请随意赞赏