# Django简介 ## Django框架 - Django是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计 - 由经验丰富的开发人员构建,实现的功能大而全,因此您可以专注于编写应用程序,而无需重新创建轮子。 - 免费开源 - 被官方称之为完美主义者的Web框架 - Django可以更快地构建更好的Web应用程序并减少代码。 - [官方网址](https://www.djangoproject.com) ## Django的安装 我们强烈推荐使用虚拟环境进行python安装环境的管理,一般Python的虚拟环境包括anaconda,virtualenv等, 我们推荐使用anaconda进行管理,相对来讲virtualenv比较过时了。 - anaconda创建虚拟环境tuling_django # 1. 使用conda命令创建一个叫tuling_djaong的基于python 3.6的虚拟环境 >conda create -n tuling_django python=3.6 # 2. 出现以下内容表示创建成功,注意此版本为window环境 # Linux环境出现的内容有点不一样 # To activate this environment, use # # $ conda activate tuling_django # # To deactivate an active environment, use # # $ conda deactivate - 安装django, 我们此处使用2.2版本 # 1. 启动我们的新的虚拟环境 >conda activate tuling_django # 2. 安装Django >pip install Django==2.2.* # 3. 检测当前是否安装Django及版本 python -m django --version ``` ## Django开发步骤 Django开发的大致步骤如下: - 创建项目,使用命令行 - 创建需要的APP - 配置settings.py - 撸代码,撸啊撸撸啊撸撸啊撸 基本步骤就这些,主要的工作还是在最后的撸代码阶段。 ## HelloWorld之Django版本 本案例源码为code/v1, [大拿同学麦扣网博客](http://www.mycode.wang/blog/liudana/)上可以直接 点击下载。 ### 创建项目 创建项目可以分两个方法: 1. shell下命令行创建 2. IDE创建 #### 命令行创建项目 创建项目需要使用命令行, 会自动创建一个同名文件夹。 # web是项目名称或者称为项目目录 django-admin startproject v1 创建完毕后,如果是linux下可以使用tree命令查看文件的层次结构, 初创的文件大致结构如下: # 会在执行命令的当前目录中 创建 web项目目录 v1 #项目名称v1 ├── manage.py # 项目管理文件单入口文件,一般不需要修改 └──v1 # 和项目同名的目录/存放于项目相关的配置文件等 ├── __init__.py # 包初始化文件 ├── settings.py # 项目的配置文件 ├── urls.py # 项目的根路由文件 └── wsgi.py # 通用网关接口服务文件/后期上线部署到专业的HTTP服务器时需要用到 或者如下图所示: ![项目结构](imgs/ly003.png) #### Pycharm创建 创建django项目还可以使用Pycharm直接创建。 Pycharm->File->New Project... ... 然后选择django项目,在创建的时候需要记得选择相应的虚拟环境。 大致流程如下图所示: ![配置django创建](imgs/ly005.jpg) 在创建的时候需要选择django的环境,此处配置选用的是anaconda对虚拟环境进行管理。 配置如图所示,需要注意的是,如果是windows环境,anaconda默认安装的话,虚拟环境会在 ProgramData文件夹下,这个文件夹一般是隐藏属性,如果看不到的话建议手动输入: ![创建django项目](imgs/ly004.jpg) ### Pycharm配置运行环境 项目创建可以使用命令行,但具体编写程序一般需要借助IDE完成,说到IDE当然我们不用宇宙 最好用的VSCode啦,我们使用PyCharm。 此处只是配置示例,其他IDE大同小异。 Pycharm配置在`File->Settings...`下,打开后如下图: ![选择配置文件](imgs/ly001.jpg) 需要注意的是此处的环境是windows下anaconda的默认环境,在windows下ProgramData是 隐藏属性,需要手动输入这个文件夹名称: ![选择虚拟环境](imgs/ly002.jpg) 需要注意的是: 1. 所谓虚拟环境其实是在虚拟环境目录下的一个python可运行文件 2. win下ProgramData是默认的位置,但这个文件夹是隐藏属性,可能看不见,需要手动输入 3. 其余平台虚拟环境会在anaconda安装目录下的env下面 ### 启动服务 弄好了这一切我们就可以让他来运行了,启动跟创建一样,也分两种方法: 1. shell下命令行启动 2. IDE下启动 #### Shell下启动 在Shell下使用终端切换到项目目录v1中并执行以下命令 >python manage.py runserver # 如果能看到以下一堆信息,特别是看到最下面三行,基本可以判定启动成功 Watching for file changes with StatReloader Performing system checks... ..... December 28, 2019 - 05:55:33 Django version 2.2.9, using settings 'web.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. #### IDE下启动 在IDE下启动,需要进行配置才可以,我们以Pycharm为例: Pycharm最简单的就是在项目管理其中找到目录下的manage.py文件,然后右键选择调试按钮: ![试运行](imgs/ly006.jpg) 运行一遍后你会发现然并卵,此时,在IDE右上角的配置文件编辑那里就会多一个manage的 环境: ![自动创建manage环境](imgs/ly007.jpg) 点击后选择`Edit Config......`,点击后如下图所示: ![配置运行环境](imgs/ly008.jpg) 此处注意两个问题: - 配置参数,如图所示即可, 图中填写了端口号,调试运行的时候需要注意 - 检查虚拟环境是否正确 ![配置运行环境](imgs/ly009.jpg) 配置完后再此点击项目下的`manage.py`文件,右键点击`Debug Manage...` ,IDE下控制台出现如Shell下运行信息即可判断初步运行成功。 注意: 本代码环境用的是win10+django2.2+python3.6,在实际启动的时候, 报sqlite3错误,提示找不到相应DLL文件。 解决办法: 去官网下载sqlite3的windows版本,解压后把两个文件放入虚拟环境下 python.exe相同目录下即可。 sqlite3下载地址: https://www.sqlite.org/2020/sqlite-dll-win64-x64-3310100.zip ### 访问服务 一旦后台启动成功,就可以通过浏览器按照启动的时候设置的IP地址和端口进行访问。 启动浏览器并 在浏览器的地址栏访问url`http://127.0.0.1:8000/`,注意此时的 IP地址和端口号应该跟你启动服务器时的IP和端口号一致。 成功后会在浏览器中看到默认页面: ![启动成功](imgs/web1.png) 需要注意的是: 1. 输入的地址包含IP+端口, 一般我们本机使用127.0.0.1就可以, 端口默认8000 2. 如果启动的时候,IP+端口都可以指定,此处只要跟我们运行的指定地址端口一致既可以 ## 创建应用 Django的应用(APP)其实相当于一个相对独立的模块,一个好的Django项目都是由一个一个相对独立 的模块构成。 APP包含完整的路由,视图等功能,一般能够独立完成一个功能。 Django默认创建后不包含视图,如果需要必须自行添加。 ### 命令行创建APP 在 manage.py 同级目录下执行以下命令创建应用: # 创建一个叫helloworld的app python manage.py startapp helloworld 应用创建成功后,会在mamage.py的同级目录中创建一个和APP同名的文件夹: v1/ ├── db.sqlite3 # Django框架默认使用数据库文件 ├── helloworld # 创建的自定义应用 │   ├── __init__.py │   ├── admin.py # django框架自带后台模块配置文件 │   ├── apps.py │   ├── migrations │   │   └── __init__.py │   ├── models.py # 模型文件 │   ├── tests.py # 测试文件 │   └── views.py # 视图函数文件 ├── manage.py # 项目管理文件 所以的项目指令都需要manage.py └── v1 # 和项目同名的目录/ 存放于项目相关的配置文件 等 ├── __init__.py # 包初始化文件 ├── settings.py # 项目的配置文件 ├── urls.py # 项目的根路由文件 └── wsgi.py # 通用网关接口服务文件/后期上线部署到专业的HTTP服务器时需要用到 ### 定义视图函数输出`Hello 北京图灵学院` 视图负责具体的业务处理,我们希望能在接收到用户访问到时候返回一个`Hello 北京图灵学院`的字符串, 则需要首先更新视图模块。 编辑 v1/helloworld/views.py文件,定义视图函数 from django.shortcuts import render # 需要导入相应内容 from django.http import HttpResponse # Create your views here. # 定义 视图函数。输出相应字符串 def hello(request): return HttpResponse('Hello 北京图灵学院...') ### 给视图函数定义访问路由 路由是访问请求的向导,我们需要来定义此路由,本案例我们采用了分级路由,后面会有专门 讲述。 在 v1/helloworld/目录中创建 urls.py文件, 此文件可以把v1下的url.py文件直接拷贝 过来使用,完成拷贝后我们需要定义路由: # v1/helloworld/urls.py from django.urls import path #需要导入视图 from . import views urlpatterns = [ #需要删除原有内容并添加下面行 path('helloworld/', views.hello), ] ### 在根路由中配置当前应用的路由 修改 v1/v1/urls.py 文件,把创建的应用中的路由定义到根路由中: from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('',include('hellworld.urls')) ] ### 启动服务,浏览器访问测试 # 启动服务。v1/manage.py同级目录中执行 python manage.py runserver 浏览器访问会得下面的结果,就是报 404 错误: ![](imgs/404.png) **问题是由于访问的URL 路径和项目中的url配置路径不一致导致的** 解决问题有两个方案: 1.改变浏览器的访问路径 访问的URL。http://127.0.0.1:8000/helloworld/ 2.改变应用中的路由配置 由原来的 path('helloworld/', views.hello), 改为 path('', views.hello), 正常的访问结果: ![](imgs/hello.png) ## 流程总结 至此,我们已经得到了一个没啥用的但能正常工作的django项目,而且,他居然还具有了分级 路由耶。 本着好记性不如烂笔头的原则, 我们来总结下django项目的一般编写过程: 1. 创建空的项目 2. 配置相关环境 3. 创建相应的APP 4. 配置APP(上面案例中省略) 5. 配置APP中子路由,并在主路由中包含对于的子路由 6. 修改views 以后我们的大致流程基本相似,我们会经常性重复此流程,直到看吐了为止。