当前位置: 首页 > news >正文

1.Django安装和项目创建

Django 框架是用Python语言开发的, 所以安装Django 就像安装其他的 Python库一样,执行如下命令即可

pip install django

你可以执行如下命令检查Django是否安装好, 并且查看安装的Django版本

python -m django --version

创建项目

安装好以后, 我们需要创建我们 的 项目目录,项目目录里面保存了开发系统的所有文件。

我们可以创建 d:\projects 作为我们的项目所在的目录。

然后从命令行窗口中 进入到 d:\projects 目录,执行下面的命令创建项目目录

django-admin startproject bysms

 注意最后的 bysms 就是项目的根目录名,执行上面命令后,就会创建 如下的目录结构:

bysms/
    manage.py
    bysms/
        __init__.py
        settings.py
        urls.py
        wsgi.py
  • 最外层 bysms/ 就是项目根目录 d:\projects\bysms\ , 项目文件都放在里面。

  • manage.py 是一个工具脚本,用作项目管理的。以后我们会使用它执行管理操作。

  • 里面的 bysms/ 目录是python包。 里面包含项目的重要配置文件。这个目录名字不能随便改,因为manage.py 要用到它。

  • bysms/settings.py 是 Django 项目的配置文件. 包含了非常重要的配置项,以后我们可能需要修改里面的配置。

  • bysms/urls.py 里面存放了 一张表, 声明了前端发过来的各种http请求,分别由哪些函数处理. 这个我们后面会重点的讲。

  • bysms/wsgi.py
    要了解这个文件的作用, 我们必须明白wsgi 是什么意思

    python 组织制定了 web 服务网关接口(Web Server Gateway Interface) 规范 ,简称wsgi。参考文档 PEP 3333 – Python Web Server Gateway Interface v1.0.1 | peps.python.org

    遵循wsgi规范的 web后端系统, 我们可以理解为 由两个部分组成

    wsgi web server 和 wsgi web application

    它们通常是运行在一个python进程中的两个模块,或者说两个子系统。

    wsgi web server 接受到前端的http请求后,会调用 wsgi web application 的接口( 比如函数或者类方法)方法,由wsgi web application 具体处理该请求。然后再把处理结果返回给 wsgi web server, wsgi web server再返回给前端。

    如下图所示

  • 最外层 bysms/ 就是项目根目录 d:\projects\bysms\ , 项目文件都放在里面。

  • manage.py 是一个工具脚本,用作项目管理的。以后我们会使用它执行管理操作。

  • 里面的 bysms/ 目录是python包。 里面包含项目的重要配置文件。这个目录名字不能随便改,因为manage.py 要用到它。

  • bysms/settings.py 是 Django 项目的配置文件. 包含了非常重要的配置项,以后我们可能需要修改里面的配置。

  • bysms/urls.py 里面存放了 一张表, 声明了前端发过来的各种http请求,分别由哪些函数处理. 这个我们后面会重点的讲。

  • bysms/wsgi.py
    要了解这个文件的作用, 我们必须明白wsgi 是什么意思

    python 组织制定了 web 服务网关接口(Web Server Gateway Interface) 规范 ,简称wsgi。参考文档 PEP 3333 – Python Web Server Gateway Interface v1.0.1 | peps.python.org

    遵循wsgi规范的 web后端系统, 我们可以理解为 由两个部分组成

    wsgi web server 和 wsgi web application

    它们通常是运行在一个python进程中的两个模块,或者说两个子系统。

    wsgi web server 接受到前端的http请求后,会调用 wsgi web application 的接口( 比如函数或者类方法)方法,由wsgi web application 具体处理该请求。然后再把处理结果返回给 wsgi web server, wsgi web server再返回给前端。

    如下图所示

        

  • 为什么要搞出两个子系统,这么麻烦呢?

    因为这两个子系统有各自负责的重点。

    wsgi web server 负责 提供高效的http请求处理环境,可以使用多线程、多进程或者协程的机制。

    http 请求发送到 wsgi web server , wsgi web server 分配 线程或者进程或者 轻量级线程(协程),然后在 这些 线程、进程、或者协程里面,去调用执行 wsgi web application 的入口代码。

    wsgi web application 被调用后,负责 处理 业务逻辑。 业务逻辑的处理可能非常复杂, wsgi web application 需要精心的设计来正确处理。

    django是 wsgi web application 的框架,它只有一个简单的单线程 wsgi web server。 供调试时使用。

    产品正式上线运行的时候,通常我们需要高效的 wsgi web server 产品,比如 gunicorn,uwsgi,cherrypy等,结合Django ,组成一个高效的 后端服务。

    所以这个 wsgi.py 就是 提供给wsgi web server调用 的接口文件,里面的变量application对应对象实现了 wsgi入口,供wsgi web server调用 。

 

运行 Django web服务

刚才我们说了, django虽然只是 wsgi web application 的框架,但是它也有一个简单的 wsgi web server。 供调试时使用。

所以也构成一个完整的后端web服务。 本地调试代码的时候,完全可以运行起来。

运行开发web 服务只需要在命令行窗口里面,

首先进入到项目根目录 ,比如,我们这里就是 d:\projects\bysms\

然后执行如下命令

python manage.py runserver 0.0.0.0:80

这样服务就会被启动。 我们就可以在浏览器访问web服务了。

其中 0.0.0.0:80 是指定 web服务绑定的 IP 地址和端口。

0.0.0.0 表示绑定本机所有的IP地址, 就是可以通过任何一个本机的IP (包括 环回地址 127.0.0.1 ) 都可以访问我们的服务。

80 表示是服务启动在80端口上。

请打开浏览器,地址栏输入 ‘127.0.0.1’ ,就可以看到如下的界面,表示Django服务搭建成功,启动成功。

注意,启动web服务的命令行窗口不能关闭,如果关闭,web服务就停止了。

相关文章:

  • springboot+基于web的传染病信息管理系统的设计与实现 毕业设计-附源码221124
  • 计算机毕业设计ssm大学生课外学习系统m65wl系统+程序+源码+lw+远程部署
  • 17、JAVA入门——多态、抽象方法和抽象类
  • [Spring实战] 整合Spring/SpringMVC/Mybatis(SSM)实现登录与注册功能(带前端)
  • [教你做小游戏] 滑动选中!PC端+移动端适配!完美用户体验!斗地主手牌交互示范
  • kafka的auto.offset.reset详解与测试
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • 内存分析总结
  • awk编辑器
  • 基于Java毕业设计游泳馆管理平台源码+系统+mysql+lw文档+部署软件
  • 2022年全国大学生数学建模竞赛C题思路与程序
  • `算法知识` 字符串哈希
  • 打造这样的“超级云APP”有什么优势?
  • 一篇文章带你理解Thread(多线程)的基础用法
  • harbor部署实录
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 10个确保微服务与容器安全的最佳实践
  • JavaScript 基础知识 - 入门篇(一)
  • js
  • Laravel Telescope:优雅的应用调试工具
  • SegmentFault 2015 Top Rank
  • Spring Boot快速入门(一):Hello Spring Boot
  • uva 10370 Above Average
  • vue--为什么data属性必须是一个函数
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 分布式事物理论与实践
  • 什么是Javascript函数节流?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 学习使用ExpressJS 4.0中的新Router
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 移动端高清、多屏适配方案
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (52)只出现一次的数字III
  • (NSDate) 时间 (time )比较
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)计算机毕业设计高校学生选课系统
  • (转)JAVA中的堆栈
  • (转)程序员疫苗:代码注入
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core使用ef 6
  • .Net的DataSet直接与SQL2005交互
  • .net流程开发平台的一些难点(1)
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .Net中wcf服务生成及调用
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • @staticmethod和@classmethod的作用与区别
  • @test注解_Spring 自定义注解你了解过吗?
  • @Transactional类内部访问失效原因详解
  • [android] 请求码和结果码的作用