Django框架环境的搭建(图文详解)

目录

day01 Web框架和Django基础

1.web框架底层

1.1 网络通信​编辑

1.2 常见软件架构

1.3 手撸web框架

2.web框架

2.1 wsgiref

2.2 werkzeug

2.3 各框架的区别

3.快速上手django框架

3.1 安装

3.2 命令行

3.3 Pycharm

4.虚拟环境

4.1 创建虚拟环境 - 命令行

4.2 Pycharm

4.2.1 项目+虚拟环境

4.2.2 django+虚拟环境【最新】

4.2.3 django+虚拟环境【指定版本】

小结

5.关于创建app

6.关于纯净版

总结


day01 Web框架和Django基础

今日概要:

  • 网络底层引入,到底什么是web框架?

  • 常见web框架对比

  • django快速上手(创建网站)

  • 常见操作:虚拟环境、django项目、多app应用、纯净版

  • 逐点剖析:路由、视图、模板、静态文件、ORM

1.web框架底层

1.1 网络通信

注意:局域网。

个人一般写程序,想要让别人访问:阿里云、腾讯云。

  • 去云平台租服务器(含公网IP)

  • 程序放在云服务器

让网络中可以互相通信的双发收发数据。

  • 我的电脑【服务端】

    import socket
    ​
    # 1.监听本机的IP和端口
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('192.168.10.3', 8001))  # 我自己的电脑IP,端口8001
    ​
    # 2.让多少人等待
    sock.listen(5)
    ​
    while True:# 3.等待连接请求的申请,有人来连接(阻塞)conn, addr = sock.accept()
    ​# 4.连接成功后立即发送conn.sendall("欢迎使用xx系统".encode("utf-8"))
    ​# 5.断开连接conn.close()
    ​
    ​
    # 6.停止服务端程序
    sock.close()

  • 女朋友的电脑(同一个局域网)【客户端】

    import socket
    ​
    # 1. 向指定IP发送连接请求
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('192.168.10.3', 8001))
    ​
    # 2. 接收你发的消息
    message = client.recv(1024)
    print(message.decode("utf-8"))
    ​
    # 3.断开连接
    client.close()

  • 姓王的好兄弟【客户端】

    import socket
    ​
    # 1. 向指定IP发送连接请求
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('192.168.10.3', 8001))
    ​
    # 2. 接收你发的消息
    message = client.recv(1024)
    print(message.decode("utf-8"))
    ​
    # 3.断开连接
    client.close()

    我们自己写时,通过socket模块可以实现网络上的两端进行通信。

1.2 常见软件架构

  • bs架构

    浏览器:充当客户端
    服务器:网站
  • cs架构,开发应用程序,例如:QQ、Pycharm、网易云音乐(安装在电脑上的软件)

    客户端:安装在电脑上的软件。 网易云音乐
    服务端:网易服务器

对于程序原来说:

  • 网站,只需要写服务端程序。

    基于django开发的本质就是网站(web应用)
    电脑上浏览器本质上是socket实现网络通信。
  • 软件,客户端 + 服务端。

1.3 手撸web框架

快速自己写以为网站(不能用django、flask等)。

import socket
​
# 1.监听本机的IP和端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('192.168.0.6', 9000))  # 我自己的电脑IP,端口8001
​
# 2.让多少人等待
sock.listen(5)
​
while True:# 3.等待连接请求的申请,有人来连接(阻塞) -> 登录浏览器来连接我conn, addr = sock.accept()
​# 4.收到浏览器发送的消息buf = conn.recv(2048)print(buf)
​# 5.给浏览器返回数据conn.send(b"HTTP/1.1 200 OK\r\n\r\n")conn.send(b"Hello, World")
​# 6.断开连接conn.close()
​
# 6.停止服务端程序
sock.close()

再引出一个知识点,浏览器再与服务端的网站进行通信时,多了几个规则。

  • 服务端:网站

  • 客户端:浏览器

    • 创建连接

    • 发送数据,固定格式

      # 请求头首行
      GET /xxx/xxx/?name=xxx&age=111 HTTP/1.1\r\n
      ​
      # 请求头
      Host: 192.168.0.6:9000\r\n
      Connection: keep-alive\r\n
      Upgrade-Insecure-Requests: 1\r\n
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36\r\n
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
      Accept-Encoding: gzip, deflate\r\n
      Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7\r\n\r\n'
      # 请求头首行
      POST /xxx/xxx/ HTTP/1.1\r\n
      ​
      # 请求头
      Host: 192.168.0.6:9000\r\n
      Connection: keep-alive\r\n
      Upgrade-Insecure-Requests: 1\r\n
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36\r\n
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
      Accept-Encoding: gzip, deflate\r\n
      Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7\r\n\r\n
      # 请求体
      username=wupeiqi&password=123
      浏览器本质上发送请求时,包含请求头和请求体。
      - GET请求- 只有请求头 + 没有请求体- 请求头之间用 \r\n- 请求头和请求体之间用 \r\n\r\n- POST请求- 只有请求头 + 有请求体- 请求头之间用 \r\n- 请求头和请求体之间用 \r\n\r\n

    • 一次请求和一次响应后,断开连接。

告诉你两个关键点:

  • http协议?

    http协议特点:无状态的短连接。
    http的应用:浏览器向服务端发送请求,就是按照http协议来的。- 请求头+请求体 ;请求头和请求体之间用 \r\n\r\n ;请求头之间用 \r\n- 一次请求和一次响应后,断开连接。  -> 短连接。  ->无状态如何体现?- 后期记住 请求头+cookie
  • GET请求和POST到底有什么区别?

    最直观的区别就是:请求体的位置区别

2.web框架

常见的web框架:django、flask、tornado、sanic、fastapi..

web应用程序:

  • 用户网络通信的socket

  • web框架

  • 业务开发

以django为例:

  • wsgiref模块、uwsgi、daphne -> 本质上都是socket实现。

  • 原来实现了框架

以flask为例:

  • werkzurg、uwsgi、...

  • flask框架

以tornado为例:

  • tornado、werkzurg、uwsgi、...

  • 框架

2.1 wsgiref

from wsgiref.simple_server import make_server
​
​
def run_server(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]
​
​
if __name__ == '__main__':httpd = make_server('127.0.0.1', 8000, run_server)httpd.serve_forever()

2.2 werkzeug

pip install werkzeug
from werkzeug.wrappers import Response
​
​
def application(environ, start_response):response = Response('Hello World!', mimetype='text/plain')return response(environ, start_response)
​
​
if __name__ == '__main__':from werkzeug.serving import run_simple
​run_simple('localhost', 4000, application)

2.3 各框架的区别

django、flask、tornado、sanic、fastapi..
  • 内部集成功能的多少

    • django,内部提供了很多组件。 【相对大】

    • flask、tornado、sanic、fastapi... 本身自己功能很少+第三方组件。【相对小】

  • 同步框架 vs 异步非阻塞

    • 异步非阻塞:tornado、sanic、fastapi、django

    • 同步:django、flask、bottle、webpy..

      1.django、flask
      2.tornado,异步非阻塞,特别NB。- 同步:常见应用。- 异步:IO应用 + conroutine装饰器 + redis/MySQL/...
      3.sanic,路飞小猿圈平台
      4.fastapi- 参考flask- py最新注解- restfulAPI- 异步目前不看好:- 增加编程的难度,功能&效率- 项目中不会有那么IO操作 ---> 100功能/2-IO ---> celery

感受不深刻,只是听我讲完了,鬼吹这么NB东西到底是怎么实现的?

  • socket & 多线程 & 多进程

  • IO多路复用

  • 顿悟

https://www.cnblogs.com/wupeiqi/p/6536518.html

 

3.快速上手django框架

3.1 安装

pip install django==3.2
C:\Python39- python.exe- Scripts- pip.exe- django-admin.exe- Lib- re.py- random.py- site-pakages- django==3.2...

3.2 命令行

  • 创建项目

    cd 指定目录
    django-admin startproject 项目名
    mysite
    ├── manage.py              [项目的管理工具]  
    └── mysite├── __init__.py├── settings.py        【配置文件,只有一部分。程序启动时,先读取django内部配置,再读settings.py】├── urls.py        【主路由,在里面编写  /xxx/xxx/xxx ---> index 】├── asgi.py            【异步】└── wsgi.py            【同步,主】
  • 编写代码 urls.py

    from django.contrib import admin
    from django.urls import path
    ​
    from django.shortcuts import HttpResponse
    ​
    def info(request):print("请求来执行了")return HttpResponse("xxxx")
    ​
    def xxxx(request):print("请求来执行了")return HttpResponse("。。。。。。")
    ​
    urlpatterns = [# path('admin/', admin.site.urls),path('api/index/', info),path('api/show/', xxxx),
    ]

  • 运行

    cd 项目
    python3.9 manage.py runserver
    python3.9 manage.py runserver 127.0.0.1:8000
    python3.9 manage.py runserver 127.0.0.1:9000
  • app概念

    cd 项目
    python manage.py startapp 名字
    mysite
    ├── manage.py              [项目的管理工具]  
    ├── web├── __init__.py├── views.py           [视图函数]├── models.py          [ORM,基于models可以对数据库进行简便的操作]...
    └── mysite├── __init__.py├── settings.py        【配置文件,只有一部分。程序启动时,先读取django内部配置,再读settings.py】├── urls.py        【主路由,在里面编写  /xxx/xxx/xxx ---> index 】├── asgi.py            【异步】└── wsgi.py            【同步,主】
    mysite
    ├── manage.py
    ├── mysite
    │   ├── __init__.py
    │   ├── asgi.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    └── web├── __init__.py├── admin.py├── apps.py├── migrations│   └── __init__.py├── models.py├── tests.py└── views.py

3.3 Pycharm

django-admin startproject 项目名称
​
cd 项目目录
python manage.py startapp
python manage.py runserver

4.虚拟环境

注意:以后再创建项目时,不要一直用系统解释器,为每个项目:虚拟环境 + 项目文件。

4.1 创建虚拟环境 - 命令行

  • venv,Python官方用于创建虚拟环境的工具。

    cd xxx/xxx/crm
    python3.9 -m venv ddd
    python3.7 -m venv xxxx
    python3.7 -m venv /xxx/xxx/xxx/xx/ppp
  • virtualenv 【推荐】

    pip install virtualenv
    cd /xxx/xx/
    virtualenv ddd --python=python3.9
    virtualenv /xxx/xx/ddd --python=python3.7

操作:

  • F:\envs\ 创建虚拟环境。

    cd F:\envs
    virtualenv crm --python=python3.9

  • 激活虚拟环境

    • win

      cd F:\envs\crm\Scripts
      activate
    • mac

      source /虚拟环境目录/bin/activate
      
  • 安装包

    pip install 包名
  • 创建django项目 D:\project\crm

    cd D:\project
    django-admin startproject crm
    D:\project\crm
    ├── manage.py              [项目的管理工具]  
    └── crm├── __init__.py├── settings.py        【配置文件,只有一部分。程序启动时,先读取django内部配置,再读settings.py】├── urls.py        【主路由,在里面编写  /xxx/xxx/xxx ---> index 】├── asgi.py            【异步】└── wsgi.py            【同步,主】
    python manage.py startapp xxxx
    python manage.py runserver 
  • 退出虚拟环境

    deactivate

4.2 Pycharm

4.2.1 项目+虚拟环境

你需要做的:

  • 创建项目+虚拟环境

  • code.py,写代码运行

  • 在虚拟环境中安装 requests

    pip install requests

4.2.2 django+虚拟环境【最新】
pip install django

注意:创建django最新版可以。

4.2.3 django+虚拟环境【指定版本】

pip install django==3.2

 

 

 

 

小结

  1. 快速使用django + 目录结构(系统解释器)

  2. 虚拟环境

    • 命令行

      virtualenv 环境名 --python=python3.9
      环境目录/Scripts/activate
      pip install django
      pip install requests
      ...

      创建django项目

      django-admin ...
      ...
    • pycharm项目+虚拟环境

  3. python+django+3.2版本

    • 先创建纯净的项目 + 虚拟环境(代码+环境放在,.venv)

      D:\code\crm- .venv
    • 再次虚拟环境中创建django

      pip install django==3.2
    • 创建项目

      cd 项目根目录
      django-admin startproject crm .
      D:\code\crm- .venv- manage.py- crm.....
    • 命令行

      python manage.py startapp app01
      python manage.py startapp app02python manage.py runserver
    • 为了更方便运行,pycharm配置。

5.关于创建app

  • 项目只需要一个app,目录机构的建议。

  • 项目只需要一个app,目录结构的建议。

    day002.venvday002......manage.pyappswebbackendapi

6.关于纯净版

总结

知道如何基于pycharm+虚拟环境+业务场景 -> 创建django项目。

问题:给别人的代码+requirements.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/209427.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Altium Designer学习笔记10

再次根据图纸进行布局走线&#xff1a; 这个MT2492 建议的布局走线。 那我这边应该是尽量按照该图进行布局&#xff1a; 其中我看到C1的电容的封装使用的是电感的封装&#xff0c;需要进行更换处理&#xff1a; 执行Validate Changes和Execute Changes操作&#xff0c;更新&a…

【C++】特殊类设计 {不能被拷贝的类;只能在堆上创建的类;只能在栈上创建的类;不能被继承的类;单例模式:懒汉模式,饿汉模式}

一、不能被拷贝的类 设计思路&#xff1a; 拷贝只会发生在两个场景中&#xff1a;拷贝构造和赋值重载&#xff0c;因此想要让一个类禁止拷贝&#xff0c;只需让该类不能调用拷贝构造以及赋值重载即可。 C98方案&#xff1a; 将拷贝构造与赋值重载只声明不定义&#xff0c;并…

echarts的横向柱状图文字省略,鼠标移入显示内容 vue3

效果图 文字省略 提示 如果是在x轴上的&#xff0c;就在x轴上添加triggerEvent: true,如果是y轴就在y轴添加&#xff0c;我是在y轴上添加的 并且自定义的方法&#xff08;我取名为extension&#xff09; // echarts 横向省略文字 鼠标移入显示内容 export const extension…

三柱汉诺塔

题目描述 汉诺塔是约19世纪末&#xff0c;在欧州的商店中出售一种智力玩具。它的结构如下图所示&#xff1a; 在一个平板上立有三根铁针&#xff0c;分别记为A, B, C。开始时&#xff0c;铁针 A 上依次叠放着从大到小 n 个圆盘&#xff0c;游戏的目标就是将 A 上的 n 个圆盘…

分布式篇---第一篇

系列文章目录 文章目录 系列文章目录前言一、分布式幂等性如何设计?二、简单一次完整的 HTTP 请求所经历的步骤?三、说说你对分布式事务的了解前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,…

状态设计模式是什么?什么是 State 状态设计模式?Python 状态设计模式示例代码

什么是 State 状态设计模式&#xff1f; 状态设计模式是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态发生改变时改变其行为&#xff0c;使其看起来好像改变了其类。状态模式主要解决的问题是&#xff1a;当一个对象的行为取决于它的状态&#xff0c;并且在运行时…

CQ 社区版 V2.6.0 发布 | SQL闪回、权限看板、新增数据源人大金仓等

前言 HELLO&#xff0c;大家好&#xff0c;又到了 CloudQuery 社区版发版时间&#xff01;本次更新版本为 v2.6.0&#xff0c;亮点多多&#xff0c;我们直入主题一起来看&#xff01; 一、本期亮点 新增 3 种数据源支持 V2.6.0&#xff0c;新增三种国产数据源支持&#xff…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《交直流配电网中柔性软开关接入的规划-运行协同优化方法》

这个标题涉及到交直流配电网中柔性软开关接入的规划-运行协同优化方法。下面是对这个标题各部分的详细解读&#xff1a; 交直流配电网&#xff1a; 这指的是一个电力系统&#xff0c;同时包含交流和直流电力传输的元素。这样的系统可能结合了传统的交流电力传输和近年来兴起的直…

加工车间污水处理设备有哪些

在加工车间中&#xff0c;污水处理设备是至关重要的一部分。它们的功能是将污水进行处理&#xff0c;确保其达到符合环保标准的水质要求。以下是一些常见的加工车间污水处理设备&#xff1a; 1.初级沉淀池&#xff1a;初级沉淀池是最基本的污水处理设备之一。它通过重力作用将…

基于51单片机的病床呼叫系统设计

**单片机设计介绍&#xff0c; 基于51单片机的病床呼叫系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的病床呼叫系统是一种用于医疗机构的设备&#xff0c;旨在提供快速、可靠的病人呼叫和监控功能。以下是…

苹果手机内存满了怎么清理?这里有你想要的答案!

手机内存不足是一个比较普遍的现象。由于现在手机应用程序的功能越来越强大&#xff0c;所以占用的内存也越来越大。同时用户会在手机中存储大量的数据&#xff0c;如照片、视频、文档等&#xff0c;这些都会占用大量的手机空间。那么&#xff0c;苹果手机内存满了怎么清理&…

重磅!2023年两院院士增选名单公布

中国科学院 关于公布2023年中国科学院院士增选当选院士名单的公告 根据《中国科学院院士章程》《中国科学院院士增选工作实施办法&#xff08;试行&#xff09;》等规定&#xff0c;2023年中国科学院选举产生了59名中国科学院院士。 现予公布。 中国科学院 2023年11月22日…