正式要开始学习Django了,首先还是先搭建一下环境,创建一个Hello World项目。好的开始是成功的一半,让我们开始吧。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
文章目录
环境说明
先总结下我的环境和版本:
- centos 7
- python 3.7
- pycharm 2019.3
- Django 2.2
下面会详细教你如何下载和配置这些环境
virtualenv中安装Django
创建一个虚拟环境,就叫django,我默认的python环境是3.7.1
[fuhx@testmachine python_projects]$ virtualenv django
如果对virtualenv不了解的朋友,可以先查看我的另一篇博客《Centos7使用virtualenv创建python开发环境虚拟环境详解》
因为并没有把本机的第三方包带进来,所以目前是什么都没有的
[fuhx@testmachine django]$ source bin/activate
(django) [fuhx@testmachine django]$ pip freeze
(django) [fuhx@testmachine django]$
去官方下载页面查询当前django的LTS版本,也就是长期支持版本。
需要注意的是,具体安装的版本一定要小心,如果不是安装的LTS版本,很有可能安装的版本很快就不支持了。
下面这张图是官方下载页面2020年2月最新的版本周期图,目前只有红框内的1.11.28和2.2.10两个版本是LTS,但是1.11版本很快就不支持了,所以我们直接安装2.2.10版本
注意版本号是用两个等号来声明的
(django) [fuhx@testmachine django]$ pip install django==2.2.10
安装完再查看一下
(django) [fuhx@testmachine django]$ pip freeze
Django==2.2.10
pytz==2019.3
sqlparse==0.3.0
(django) [fuhx@testmachine django]$
安装好环境就可以开始创建我们的第一个项目了。
第一个项目 - HelloDjango
因为Django完整操作较多,这个HelloDjango项目主要是为了熟悉一下流程,以及了解项目目录框架,更多的细节后面再慢慢讨论。
1. 新建项目
首先新建一个项目,这个命令会创建和项目名同名的一个文件夹和下面的所有需要的子文件夹结构:
(django) [fuhx@testmachine django]$ django-admin startproject HelloDjango
更多帮助文档可以查看
django-admin help
以及django-admin help command
查看下生成的目录树形结构:
(django) [fuhx@testmachine django]$ tree HelloDjango
HelloDjango
├── HelloDjango
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
注意这里项目目录下还有个跟项目一样名字的文件夹,两者的层级不要弄混
这里没有任何业务相关的内容,几个文件作用如下:
manage.py
- 项目的管理文件,和项目相关的具体操作基本通过它来完成__init__.py
- 包标识器settings.py
- 项目的全局设置urls.py
- 不同url路由分发的功能wsgi.py
- web网关服务接口,用于部署服务使用,开发阶段基本用不上
2. 新建业务应用
下面开始创建具体的业务相关的应用,这个命令会创建业务名相同的文件夹和下面所需要的子文件夹结构
(django) [fuhx@testmachine django]$ cd HelloDjango/
(django) [fuhx@testmachine HelloDjango]$ python manage.py startapp App
更多帮助文档可以查看
python manage.py help
以及python manage.py help command
看一下现在的目录树形结构:
.
├── App
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── HelloDjango
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ └── settings.cpython-37.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
App
目录下跟业务相关的几个文件作用如下;
admin.py
- 后台管理工具apps.py
- 应用相关的配置文件__init__.py
- 包标识器migrations
- 连接数据库时候的迁移文件models.py
- MTV(model,template,view)模型中负责和数据库交互的模块tests.py
- 测试功能模块views.py
- MTV(model,template,view)模型中视图函数模块
3. 启动项目
在没有写一行代码的情况下已经可以启动这个项目了,不过我们看到的将是一个测试页面罢了。
(django) [fuhx@testmachine HelloDjango]$ 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.
February 25, 2020 - 05:31:37
Django version 2.2.10, using settings 'HelloDjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
runserver命令使用的是Django内置的服务器,性能有限,只用于测试,不要用在线上环境
这里有数据库迁移的一些报错,可以暂时忽略
根据提示可以通过访问http://127.0.0.1:8000
来查看项目,这里提示因为打开了DEBUG=True
开关而且没有配置任何url所以会看到这个测试页面
如果想关掉服务器,直接Ctrl + c即可
Pycharm打开项目环境
HelloDjango这个项目成功被访问,下面我们就更进一步,看看项目文件中到底有些什么内容。
这一步需要用到pycharm工具,没有安装的朋友可以参考我的另一篇博客《Centos7安装pycharm 2019.3并配置桌面快捷方式详解》。
1. 打开项目目录
需要注意,打开工程的时候要选择manage.py
的上一级目录,如果选错会造成后面的一些自动提示等错误。
打开以后界面如下,注意红框中显示该项目有个叉叉,表示该项目没有配置解释器:
2. 配置解释器
因为我们是在virtualenv虚拟环境中,所以需要指定虚拟环境中的解释器。
打开设置页面,选择Project Interpreter
,点击右边的齿轮添加新的解释器
选择Existing environment
,然后将虚拟环境中的python二进制文件加进去
然后可以看到只有我们后来安装的几个第三方包,点击确认即可
3. 查看Django项目配置文件
打开项目配置文件HelloDjango/settings.py
,有以下几个关键配置说明一下
-
BASE_DIR
项目的根目录,用来在以后利用os.path.join(BASE_DIR,xxx)
去构建路径 -
DEBUG=True
这就是之前看到的测试页面里面提到的那个设置,生产环境要关闭 -
ALLOWED_HOSTS
允许的用户,如果允许所有用户直接用*
即可 -
INSTALLED_APPS
新建的项目可以加在这个list的结尾,这样pycharm就可以做一些相关提示了,例如加刚才创建的'App'
-
DATABASES
这里使用的是sqlite3,适用于嵌入式环境和测试环境,命令和mysql类似 -
LANGUAGE_CODE
英文是en-us,如果要换成中文设置为zh-hans -
TIME_ZONE
时区,要变东八区可以设置为Asia/Shanghai
4. 清除数据库迁移的报错
前面提到在跑runserver
启动项目以后会出现一些数据迁移的报错,我们来根据提示把这些报错都干掉
连接好sqlite数据库,发现只有main
数据库中一个空的表sqlite_master
表
如何连接sqlite数据库,可以参考我的另一篇博客《Pycharm 2019.3连接sqlite数据库操作详解》
在下面的terminal按照错误提示运行如下命令
(django) [fuhx@testmachine HelloDjango]$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sessions.0001_initial... OK
(django) [fuhx@testmachine HelloDjango]$
点击sqlite的刷新按钮,会发现多了好几张表
先不用管这几张表,再次启动项目会发现之前的报错都消失了
(django) [fuhx@testmachine HelloDjango]$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
February 25, 2020 - 20:39:48
Django version 2.2.10, using settings 'HelloDjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
第一个网页
前面我们访问http://127.0.0.1:8000
成功看到了测试页面,但是这只能说明项目环境搭好了。
现在我们正式开始设计自己的第一个网页,这个网页在我们访问http://127.0.0.1:8000/hello/
的时候会显示"Hello Django!"。这里主要是熟悉网页显示的后台逻辑和流程。
正常按照MTV模型,用户请求一个url,首先根据路由规则,指定一个view视图函数去响应;然后如果有数据库交互需要把请求发到models;最后通过template生成特定结果,例如json或者html返回给用户。
这里我们简化下流程,首先指定一个路由规则,将url和view函数对应起来。然后设计一个view函数直接返回"Hello Django!"给用户。
一共两步。
1. 路由规则
路由规则由HelloDjango/urls.py
文件来控制,这是个全局的设定,也就是说路由规则可以将url分配给多个业务项目。
修改文件如下
from django.contrib import admin
from django.urls import path
from App import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', views.hello),
]
提供的例子表示访问http://127.0.0.1:8000/admin/
会做的响应,第一个那么依葫芦画瓢就可以做一个访问http://127.0.0.1:8000/hello/
的响应。不过不同的是这里要用到view函数,我们先在这里放一个hello函数,一会再去定义。注意这里放函数名即可,不需要加小括号。
这里需要提一下pycharm中的万能键 Alt + Enter,出现任何波浪线都可以利用这个按键获得解决提示,例如这里不知道如何import views它可以帮你自动生成import语句
这里的匹配规则也可以用正则表达式,具体方法可以查看另一篇博客《Django 2019.3的path使用正则表达式匹配url的方法》
2. view函数
view函数在App/views.py
中规定。
加入下面的函数
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def hello(request):
return HttpResponse('Hello Django!')
这里view函数默认会带一个request
参数,表示一个request对象。而且一定要返回一个Response对象。
设定好了发现Django内建服务器自动重启刷新了,试着去访问http://127.0.0.1:8000/hello/
发现成功返回结果
总结
这一节结束,我们成功返回了一个网页,也就是完成了MTV模型中的V。下一节我们一起来看看如何返回一个html页面给用户,也就是T的部分。