Django(一、简介,安装与使用)

news2024/11/24 14:52:59

文章目录

  • 一、Django引入
      • 1.web应用程序
            • 什么是web?
            • web引用程序的优点
            • web应用程序的缺点
            • 什么是web框架
      • 2.纯手写web框架
            • 1.web框架的本质
            • 2.HTTP协议的特性:
            • 3.编写
            • 基于wsgire模块搭建web框架
            • 代码封装优化
            • 代码封装
  • 二、Django框架的学习
      • 1.Python中的主流框架
      • 2.如何使用Django:
            • 1.版本问题
            • 2.运行Django注意事项
            • 3.下载
            • 4.验证
            • 5.常见命令
            • 6.pycharm自动创建django项目
      • 3.Django app的概念
            • 创建应用
            • 注册应用
      • Django小白必会三板斧

一、Django引入

1.web应用程序

什么是web?

web应用程序是一种可以通过web访问的应用程序,用户只需有浏览器即可,不需要再安装其他软件
比如:淘宝网、京东网、博客园等都是基于web应用的程序

应用程序有两种模式C/S、B/S
C/S是客户端/服务端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务端应用程序,这类应用程序一般借助IE等浏览器来运行。web应用程序一般是B/S模式

web引用程序的优点
  1. 你所需要的就只是一个适用的浏览器
  2. 节省硬盘空间
  3. 它们不需要更新,因为所有的新特性都在服务器上执行,从而自动传达到用户端
  4. 可以跨平台使用:windows,Mac,Linux等等
web应用程序的缺点

严重依赖服务端正常运行,一旦服务端出现问题,客户端就会受到影响

什么是web框架

被人写好的框架(就是一堆文件和目录),我们只需要在固定的位置写代码即可

2.纯手写web框架

1.web框架的本质

web框架本质上可以看成是一个功能强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端。两者通过网络请求实现数据交互,学者们也可以从架构层面上先简单的将Web框架看做是对前端、数据库的全方位整合
在这里插入图片描述

2.HTTP协议的特性:

1.四大特性
基于请求响应
基于TCP协议之上的应用层协议
无状态
短连接

2.请求数据格式
请求首行(请求方式、协议、版本号、路径)
请求头
\r\n
请求体
\r\n
请求体(get请求方式是没有请求体的、POST请求方式才有请求体)

3.响应数据格式
响应首行()
响应头
\r\n
响应体()

4.响应状态码
1xx
2xx
3xx
4xx
5xx

3.编写
import socket

server = socket.socket()  # 默认是TCP协议
server.bind(('127.0.0.1', 8800))  # IP PORT
server.listen(3)  # 半连接池

while True:
    sock, addr = server.accept()  # 等待连接
    data = sock.recv(1024)  # 字节bytes
    sock.send(b'http/1.1 200 ok\r\n\r\n')  
    data_str = data.decode()  # 转码
    data_list = data_str.split(' ')[1]  # 切分后索引取值
    print(data_list)
    if data_list == '/index':
        sock.send(b'hello index')
    elif data_list == '/login':
        sock.send(b'hello login')
    else:
        sock.send(b'hello home')

当前的服务端存在什么问题?

  1. socket部分需要每次都需要我们自己写
  2. 我们需要自己每次处理HTTP格式的数据,自己转码、切分、取值等
  3. 没有解决高并发问题

以上的问题怎么优化呢?
借助于wsgiref模块的使用

基于wsgire模块搭建web框架
from wsgiref.simple_server import make_server

def run(request, response):
    """
    :param request: 请求相关数据
    :param response: 响应相关数据
    :return: 返回给客户端的真实数据
    """
    response('200 OK', [])  # 固定格式 不用管它
    # print(request)  是一个处理之后的大字典
    path_info = request.get('PATH_INFO')
    if path_info == '/index':
        return [b'index']
    elif path_info == '/login':
        return [b'login']
    return [b'hello wsgiref module']


if __name__ == '__main__':
    server = make_server('127.0.0.1', 8080, run)  # 实时监听127.0.0.1:8080 一旦有请求过来自动给第三个参数加括号并传参数调用
    server.serve_forever()  # 启动服务端
代码封装优化
1.网址后缀的匹配问题
2.每个后缀匹配成功后执行的代码有多有少
	面条版	函数版	模块版
3.将分支的代码封装成一个个函数
4.将网址后缀与函数名做对应关系
5.获取网址后缀循环匹配
6.如果想新增功能只需要先写函数再添加一个对应关系即可
7.根据不同的功能拆分成不同的py文件
	views.py		存储核心业务逻辑(功能函数)
 	urls.py			存储网址后缀与函数名对应关系
 	templates目录	   存储html页面文件
8.为了使函数体代码中业务逻辑有更多的数据可用
	将request大字典转手传给这个函数(可用不用但是不能没有)
代码封装

1.逐次拆分出来
模块封装功能

from wsgiref import simple_server

def run(request, response):
    """
    :param request: 请求相关的数据
    :param response: 响应相关的数据
    :return: 返回给客户端的展示数据
    """
    response('200 OK', [])  # 固定编写 无需掌握    
    return [b'hello jason']

if __name__ == '__main__':
    server = simple_server.make_server('127.0.0.1', 8080, run)
    '''监听本机8080端口 一旦有请求访问 自动触发run方法的执行'''
    server.serve_forever()
# 模块封装了socket代码并将请求数据处理成诸多k:v键值对

路由对应响应

# run函数体中添加下列代码
current_path = request.get("PATH_INFO")
if current_path == '/login':
   return [b'hello login html']
elif current_path == '/register':
   return [b'hello register html']
return [b'404 error']

2.封装成函数

def register(request):
    return 'register'

def login(request):
    return 'login'

def error(request):
    with open(r'templates/error.html', 'r', encoding='utf8') as f:
        return f.read()

urls = (
    ('/login',login),
    ('/register',register)
)

def run(request, response):
    func_name = None
    for url_tuple in urls:  
        if current_path == url_tuple[0]:
            # 先获取对应的函数名
            func_name = url_tuple[1]
            # 一旦匹配上了 后续的对应关系就无需在循环比对了
            break
    # for循环运行完毕之后 func_name也有可能是None
    if func_name:
        res = func_name(request)
    else:
        res = error(request)  # 顺手将request也传给函数 便于后续数据的获取
    return [res.encode('utf8')]

将后缀匹配单独做一个模块

# 后缀匹配
urls = (
    ('/register', register),
    ('/login', login),
    ('/index', index),
)

服务端启动文件

from wsgiref import simple_server
from urls import urls
from views import error

def run(request, response):
    response('200 OK', []) 
    current_path = request.get("PATH_INFO")
    func_name = None
    for url_tuple in urls:  # ('/register', register)
        if current_path == url_tuple[0]:
            func_name = url_tuple[1]
            break
    if func_name:
        res = func_name(request)
    else:
        res = error(request) 
    return [res.encode('utf8')]

if __name__ == '__main__':
    server = simple_server.make_server('127.0.0.1', 8080, run)
    server.serve_forever()

请求后缀相对应的响应

def register(request):
    return 'register'

def login(request):
    return 'login'

def index(request):
    return 'index'

def error(request):
    with open(r'templates/error.html', 'r', encoding='utf8') as f:
        return f.read()

总结拆分后要是想新增一个功能,只能在view.py中编写函数,urls.py添加对应关系即可

3.模板文件和静态文件

templates文件夹   存储HTML文件
static文件夹      存储HTLML页面所需静态资源

二、Django框架的学习

1.Python中的主流框架

Django框架:最主流的,市场占用率90%以上,笨重的框架,里面自带了很重的模块,不适用于小项目,类似于航空母舰

falsk框架:轻量级的,小而美,自带的功能比较少,需要安装很多的第三方模块,当你安装的模块足够多的时候,也差不多跟Django差不多了

tornado框架:异步非阻塞、高性能、学这个框架成本有点高、解决的并发量挺高的,它一般用在特殊的场景

fastapi框架:它主要用来写一些接口,不写页面,他只负责写业务逻辑

2.如何使用Django:

1.版本问题
django 1.x    同步      1.11
django 2.x    同步      2.2       常用
django 3.x   支持异步    3.2
django 4.x   支持异步    4.2
版本之间的差异其实不大,主要是添加了额外的功能
2.运行Django注意事项

1.django项目中所有的文件名目录名不要出现中文
2.计算机名称尽量不要出来中文
3.一个pycharm尽量就是一个完整的项目(不要嵌套和叠加)
4.不同版本的python解释器与不同版本的django可以会出现问题

3.下载

pip3 install django 默认最新版
pip3 install django版本号 指定版本
pip3 install django
2.2.22
pip下载模块会自动解决依赖问题(会把关联需要用到的模块一下下载)

4.验证
django-admin
5.常见命令
1.创建django项目
	django-admin startproject  项目名
2.启动django项目
	cd 项目名
    python38 manage.py runserver ip:port
6.pycharm自动创建django项目
pycharm会自动创建django项目,但是配置文件中可能会报错,需要改目录配置
	os.path.join(BASE_DIR,'templates')

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.Django app的概念

Django框架就类似于是一所大学,一所大学也要有二级学院
应用就类似于是二级学院,一个Django框架至少要有一个应用

创建应用

1.终端命令创建应用

python38 manage.py startapp 应用名

2.pycharm创建应用
在这里插入图片描述
新建Django项目的时候默认创建一个,并且会自动注册应用

注册应用

在你的Django项目里找到settings.py文件,找到INSTALLED_APPS列表,添加应用名
在这里插入图片描述

Django主要目录结构

django2                 项目名称
	app01				应用名称
	migrations			用来存储数据库迁移记录
	__init__.py			
	admin.py			跟后台项目注册相关
	apps.py             跟一些注册相关
	models.py			数据库  模型层
	tests.py   			测试文件
	views.py			视图文件,写一些后端逻辑
django2
	__init__.py			
	settings.py			配置相关
	urls.py				路由相关
	wsgi.py				内部封装wsgiref服务器
templates				模型文件夹,需手动创建,pycharm自动创建
db.sqlite3				Django自带的小型数据库
manage.py				Django框架的入口文件

Django小白必会三板斧

frpm django.shortcuts import render,HttpResponse,redirect

HttpResponse       返回字符串类型的数据
render             返回HTML页面并且支持传值
redirect           重定向

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes实战(四)-部署docker harbor私有仓库

1 Docker原生私有仓库Registry 1.1 原生私有仓库Registry概述 Docker的仓库主要分两类: 私有仓库公有仓库 共有仓库只要在官方注册用户,登录即可使用。但对于仓库的使用,企业还是会有自己的专属镜像,所以私有库的搭建也是很有…

基于SSM的婚恋网站的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

前端常用的开发工具有哪些?

目录 内置管理系统的通用场景 前后端代码生成器 权限管控 开放源码 运行性能 主流数据库 写在最后 目前使用的是JNPF框架。 前端采用Vue.js,这是一种流行的前端JavaScript框架,用于构建用户界面。Vue.js具有轻量级、可扩展性强和生态系统丰富等特点&…

成集云 | 企业微信考试+活动抽奖小程序系统 | 解决方案

方案介绍 企业微信考试功能是一种基于企业微信平台的在线考试系统,可以帮助企业进行员工培训、考核、招聘等考试场景。 活动抽奖小程序系统是一种基于互联网技术的应用程序,旨在为用户提供便捷、公平的抽奖体验。它可以帮助商家或平台吸引用户关注和参…

Gorm 中的钩子和回调

一个全面的指南,利用 GORM 中的钩子和回调的力量,为定制的数据库工作流程 在数据库管理领域,定制化是打造高效和定制化工作流程的关键。GORM,这个充满活力的 Go 对象关系映射库,为开发人员提供了钩子和回调的功能&…

机器人伺服驱动控制环

伺服驱动器​的控制环,包括:位置环、速度环、电流环这三种类型。 对于伺服的控制回路,内侧控制环的响应带宽一般会是外侧控制环的5到10倍。也就是说,电流环带宽大致是速度环的5到10倍,速度环带宽则约为位置环的5到10倍…

K8S知识点(七)

(1)实战入门-Namespace kubernets:系统创建的资源在这个命名空间里 ,集群组件资源 kubrnets组件也是以pod的形式运行的 命令行方式操作 查看namespace和详情: 创建和查看和删除: 使用过配置文件操作&am…

Docker 介绍

Docker 介绍 1 介绍1.1 概述1.2 资源高效利用1.3 发展历程1.4 组件1.5 工具1.6 对环境部署和虚拟化的影响1.7 优点1.8 容器技术核心CgroupNamespaceUnionFS 2 命令信息、状态、配置info命令用于显示当前系统信息、docker容器、镜像个数、设置等信息 镜像容器资源 3 安装3.1 版本…

flashAttention是什么

flashAttention是一种attention加速计算的精确算法,它的核心有三点:tiling(分块计算),kernel合并,和重计算。

03运算符综合

03 3.1.1算数运算符 3.1.2赋值运算符 3.1.3比较(关系)运算符 3.1.4逻辑运算符 3.1.5位运算符 3.2运算符的优先级 3.3条件表达式

IP地址冲突解决办法

在计算机网络中,每个设备都需要一个唯一的IP地址来与其他设备进行通信。然而,有时候会出现IP地址冲突的情况即多个设备使用了相同的IP地址。这种冲突会导致网络连接问题,因此需要及时解决。 IP地址查询:IP66_ip归属地在线查询_免费…

Python 数据库应用教程:安装 MySQL 及使用 MySQL Connector

Python可以用于数据库应用程序。 其中最流行的数据库之一是MySQL。 MySQL数据库 为了能够在本教程中尝试代码示例,您应该在计算机上安装MySQL。 您可以在 MySQL官方网站 下载MySQL数据库。 安装MySQL驱动程序 Python需要一个MySQL驱动程序来访问MySQL数据库。…

关于electron打包卡在winCodeSign下载问题

简单粗暴,直接上解决方案: 在你的项目根目录下创建一个.npmrc的文件,且在里面加上以下文本,不用在意这个镜像源是不是最新的,它会自己重定向到nodemirror这个域名里下载 ELECTRON_MIRRORhttps://npm.taobao.org/mirror…

RS练习 - PTE(一)

目录 RS 题目练习 请问大学中的研究员到底处于一个什么样的地位,它的晋升通道是什么样的? 介绍一下莎翁笔下的塞壬 介绍一下绘画当中的至上主义派 介绍一下黑格尔的主仆辩证法 介绍一下巴塔耶的“经济学的终结” 介绍一下愿望驱动的力比多经济&am…

flink的带状态的RichFlatMapFunction函数使用

背景 使用RichFlatMapFunction可以带状态来决定如何对数据流进行转换,而且这种用法非常常见,根据之前遇到过的某个key的状态来决定再次遇到同样的key时要如何进行数据转换,本文就来简单举个例子说明下RichFlatMapFunction的使用方法 RichFl…

一台电脑生成两个ssh,绑定两个GitHub账号

背景 一般一台电脑账号生成一个ssh绑定一个GitHub,即一一对应的关系!我之前有一个账号也配置了ssh,但是我想经营两个GitHub账号,当我用https url clone新账号的仓库时,直接超时。所以想起了配置ssh。于是有了今天这篇…

UG画弹簧模型教程

我们通常做的弹簧大多数都圆柱形的,如果要创建弹簧弯曲的形状也是可以的,这里介绍怎样通过样条曲线做弯曲样式来生成弹簧的技巧。 UG怎么画已经折弯的弹簧模型? 1、先新建一个模型文件,进入草图,绘制一条样条曲线,样…

深入理解指针:【探索指针的高级概念和应用二】

目录 一,数组参数、指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 二,函数指针 三,函数指针数组 🍂函数指针数组的用途(转移表): 四,指向函数指针…

Git 代码库 gogs 部署私服及 https 配置手册

背景 玩了一下 Git ,想到一个问题:企业内部怎么用 Git 呢?仓库哪里来呢? 理一理 Git 及其相关产品的区别: Git 分布式版本管理工具。GitHub 和 Gitee ,基于 Git 的互联网代码托管平台,一个是…

【小技巧】WPS统计纯汉字(不计标点符号)

【小技巧】WPS统计纯汉字(不计标点符号) 首先,CtrlF打开查找页面: 选择“高级搜索”,然后勾选“使用通配符”,然后在“查找内容”后面输入:[一-﨩]。注意:一定要带“[]”和“-”且…