Python之Django

web应用程序

# Django框架是一款专门用来开发web应用的框架

# Web应用程序是一种可以通过浏览器访问的应用程序, B/S架构

           案例:淘宝网、京东...

# 应用程序有两种模式:

        C/S:客户端/服务器端程序,这类程序一般独立运行       

        B/S:浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行        

      

# Web应用程序的优点:

        1. 你所需要的只是一个适用的浏览器
        2. 节省硬盘空间
        3. 它们不需要更新,因为所有新的特性都在服务器上执行,从而自动传达到用户端;
        4. 过跨平台使用的例如Windows,Mac,Linux等等

# Web应用程序的缺点:

        """严重依赖服务端的正常运行、服务端一旦出问题、客户端里面受到影响"""

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

手写web框架(理解)

# web应用程序是B/S架构的,我们需自己写一个服务端、然后让浏览器作为客户端即可

   怎么样去写一个服务端? socket编程

# 在网址栏中输入什么后缀就返回什么后缀:

            1. 服务端要知道你网址栏里输入的是什么后缀
            2. 服务端做判断,然后做对应的返回

# 存在的问题:

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

   优化问题------>wsgiref模块的使用

import  socket
 
server = socket.socket()
server.bind(('127.0.0.1',7890))
server.listen(3)
 
while True:
    # 等待客户端发来连接
    sock,addr = server.accept()
    data = sock.recv(1024)
 
    # 网址栏输入什么后缀就返回什么后缀
    print(data.decode('utf-8'))   #二进制转字符串
    str_data = data.decode('utf-8')
    lst_data = str_data.split(' ')
    print(lst_data)
    current_path =  lst_data[1]
 
    # 给客户端返回消息
    sock.send((b'HTTP/1.1 200 OK \r\n\r\n'))  #TCP的流水协议,短时间内一次性接收多个数据
 
    if current_path == 'index':
        sock.send(b'index')
    elif current_path == '/home':
        sock.send(b'home')
    # 存在问题:自己转码,自己切分,自己取值,没有解决高并发问题等等
 
    sock.close()

HTTP协议的特性

1. 四大特性:* 基于请求响应
                      * 基于TCP协议之上的应用层协议
                      * 无状态
                      * 短链接    
2. 请求数据格式:# 请求首行(请求方式、协议、版本号、路径)
                             # 请求头
                             # \r\n
                             # 请求体(get请求方式是没有请求体的、POST请求方式才有请求体)
3. 响应数据格式: * 响应首行()
                              * 响应头
                              *   \r\n
                              *   响应体()
4. 响应状态码: 1xx、2xx、 3xx、 4xx、 5xx

wsgiref模块的使用

wsgiref服务器---------->uwsgi服务器(uwsgi)-------->Nginx服务器+uwsgi服务器

# wsgiref模块是一个内置的模块,直接可以拿来使用,无需安装

# 它帮助我们封装了socket部分,也解决了部分的高并发问题,会帮我们把HTTP格式的数据      做封装处理,也就是说不需要我们在自己处理

views.py: 主要用来写业务逻辑的,它也称为是视图文件def index():
 

    with open('a.txt','r',encoding='utf-8')as f:
        return f.read()
    
# def index():
#     return 'from index'
 
def home():
    return  'from home'
 
def login():
    return 'from login'
 
def register():
    return 'from register'

urls.py :主要用来写后缀和视图函数的对应关系,它也称为是路由文件


from views import *
 
urls = (
    ('/index',index),
    ('/home',home),
    ('/login',login),
    ('/register',register),
)

template:存储项目中用到的模板文件,html文件,模板文本,提供了一些模板语法.

"""每一个框架都应用有一个入口文件,Django也不例外"""

wsgiref模块:

from wsgiref.simple_server import make_server
 
from urls import urls
def run(env,response):
    """
    :param env:请求来的时候,携带的请求数据都在这个里面
    :param response:服务端给客户端响应的数据
    :return:返回客户端显示的
    """
    response('200 OK',[])
    print(env)
    current_path = env.get('PATH_INFO')
 
    func = None
    for url in urls:
        if current_path == url[0]:
            func = url[1]  # 后缀对应的函数名
            break
 
    if func:
        res=func()
        return [res.encode('utf-8')]
    else:
        return [b'404 error']
 
 
if __name__ == '__main__':
    sever = make_server('127.0.0.1',7000,app=run)   # WSGIServer类的对象
    """
        1、会实时监听'127.0.0.1':7890这个地址,只有客户端来连接就会做出响应
        2、app=run:当有客户端请求过来的时候,会把该请求交给run函数来处理,不要加()
        3、django中这里写的是函数名,当请求来的时候,会调用这个函数,函数加括号
        4、如果是flask框架,app后写的是对象,当请求来时会交给这个对象处理,只不过变成了对象加括号
            类()--->触发__init__执行
            对象() --->实例化---->__call__的执行---->里面写的是falsk框架的源码入口位置
    """
    sever.serve_forever()  # 启动框架

Django框架的学习

# python主流框架:
Django框架:最主流的,市场占用率90%以上,笨重的,自带了很多模块,不适用于小项目
flask框架:轻量级的,小而美,自带功能比较少,需要安装很多第三方模块,当安装模块足 够多时,也跟Django差不多笨重了
torna框架:异步非阻塞,高性能、学这个框架成本高,解决并发量高,一般用于特殊场景
sanic框架
fastapi框架:主要用来写一些接口,不出来页面,只负责写业务逻辑

Django的使用:

1. 需要先安装: pip install django

2. 版本的问题:
            django1.x: 以前的老项目在使用,它跟2.x的版本区别不是特别大
            django2.x:主流的项目使用的都是2.x的版本,有一点区别的跟1.x
            django3.x: 新版本了,现在有不少的项目确实在选择3.x的版本
         # 比如:drf框架要求django的版本必须是2以上,不支持1的版本

3. django的版本要和你的Python的版本要匹配:
                        django2----->python3.6以上
                        django1----->python3.6

4. 如何创建django项目:# 先切换路径到你想存储的位置
      命令行创建:
                django-admin startproject 项目名称
                 django-admin startproject myfirst

    pycharm创建项目: File---->New project-----> django ...

5. 注意事项:
            1. 项目名称必须是英文,不能是中文
            2. 一个pycharm窗口只打开一个django项目

6. 启动项目:  # 先把路径切到跟manage.py同级目录下面
     命令行启动:
                python3 manage.py runserver
                python3 manage.py runserver 8001  #修改端口

7. 创建应用:
             python manage.py startapp 应用名
             python manage.py startapp app01

# 创建完应用之后,还要做一件非常重要的事情,就是注册应用

# 打不开的话,在setting里面设置

            'DIRS': [os.path.join(BASE_DIR, 'templates')]

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

taobao
    user
    order
    address
    """应用名要做到见名知意,符合变量的命名规则即可,但是,教学使用app01 02 03..."""

Django主要文件的介绍



 

mysecond                    # 项目名称
    app01                      # 应用名称
        migrations           # 它是迁移数据的记录
        __init__.py
        admin.py             # django自带的后台管理系统
        apps.py               # 暂且忽略,写一些注册的东西
        models.py           # 模型层,跟数据库打交道的,以后创建表就在这里写
        tests.py               # 测试脚本
        views.py              # 视图文件,主要用来写核心的业务逻辑的
    mysecond
        __init__.py
        settings.py            # Django的全局配置文件
        urls.py                  # 路由文件,写地址的后缀和视图函数的对应关系
        wsgi.py                # wsgiref服务器
    templates                 # 存储HTML文件的
    db.sqlite3                 # Django自带的小型数据库
    manage.py               # Django的启动文件,入口文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux之进程控制

进程创建&fork函数 fork函数之前就已经提到,它从已存在进程中创建一个新进程,新进程为子进程,而原进程为父进程。 调用接口:fork() 头文件:unistd.h 功能:创建一个子进程,给子进程返回0,父进程返回子进程pid …

如何用devtools快速开发一个R语言包?

如何用devtools快速开发一个R语言包? 1. 准备工作2. 如何完整开发一个R包3. 初始化新包4. 启用Git仓库5. 按照目标实现一个函数6. 在.R文件夹下创建文件并保存代码7. 函数测试8. 阶段性总结9. 时不时地检查完整工作状态10. 编辑DESCRIPTION文件11. 配置许可证12. 配…

vuecli3 批量打印二维码

安装以个命令: npm install qrcode --save npm install print-js --save 页面使用: import qrcode from qrcode import printJS from print-js <el-button type"primary" click"handleBulkPrint">批量打印</el-button>methods: {// 批量打印…

小H靶场学习笔记:DC-1

DC-1 Created: November 8, 2023 11:41 PM Tags: Drupal, SUID提权 Owner: 只惠摸鱼 打靶场过程 nmap扫描 存活主机 192.168.199.128可能性更大 8011122端口开发 &#xff0c;访问跳转出Drupal页面&#xff0c;确定为靶机 使用插件进行指纹识别 可知以下信息&#xff1a…

Android Studio导入,删除第三方库

Android项目经常用到无私的程序员们提供的第三方类库。本篇博客就是实现第三方库的导入和删除。 一、导入第三方库 1、将需要的库下载到本地&#xff1b; 2、新建Moudle (1)File --- New Moudle (2)选择Android Library --- Next (3)填写Moudle名 --- Finish。一个新的Mou…

变电站自动化系统中的安全措施分析及应用-安科瑞

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;阐述变电运行中的问题&#xff0c;电气自动化系统与安全运行措施&#xff0c;包括自动控制设备的投入&#xff0c;电气自动 化与计算机技术相、设备数据的采集与处理、自动化系统的升级、人工智能技术的应用。 关键…

【Git】Git 学习笔记_操作本地仓库

1. 安装与初始化配置 1.1 安装 下载地址 在文件夹里右键点击 git bash here 即可打开命令行面板。 git -v // 查看版本1.2 配置 git config --global user.name "heo" git config --global user.email xxxgmail.com git config --global credential.helper stor…

深度学习入门-基于Python的理论与实现摘要记录

基本是《深度学习入门-基于Python的理论与实现》的复制粘贴&#xff0c;以作为日后的检索和查询使用 感知机 感知机接收多个输入信号&#xff0c;输出一个信号。 感知机原理 感知机接收多个输入信号&#xff0c;输出一个信号。 图2-1是一个接收两个输入信号的感知机的例子。…

uniapp:打包ios配置隐私协议框

使用uniapp打包ios 上架商店需要配置隐私协议政策弹窗。当用户点击确定后才能继续操作。 首先manifest.json中配置使用原生隐私政策提示框是不支持ios的。不用勾选。 解决思路&#xff1a; 1、新建页面&#xff1a;iosLogin.vue&#xff0c;pages.json中 这个页面需要放在第一…

计算机网络:概述

0 学时安排及讨论题目 0.1讨论题目&#xff1a; CSMA/CD协议交换机基本原理ARP协议及其安全子网划分IP分片路由选择算法网络地址转换NATTCP连接建立和释放再论网络体系结构 0.2 本节主要内容 计算机网络在信息时代中的作用 互联网概述 互联网的组成 计算机网络在我国的发展 …

extractvalue报错注入理论及实战

报错注入 什么是报错注入 构造语句&#xff0c;让错误信息中夹杂可以显示数据库内容的查询语句&#xff0c;返回报错提示中包括数据库中的内容 如上图所示&#xff0c;通过group by的报错&#xff0c;我们可以知道列数是多少 输入正确的查询数据库的SQL语句&#xff0c;虽然可…

Zookeeper经典应用场景实战(二)

1. Zookeeper 分布式锁实战 1.1 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中&#xff0c;就需要 一种更…

android studio 字节码查看工具jclasslib bytecode viewer

jclasslib bytecode viewer 是一款非常好用的.class文件查看工具&#xff1b; jclasslib bytecode editor is a tool that visualizes all aspects of compiled Java class files and the contained bytecode. Many aspects of class files can be edited in the UI. In addit…

excel表的筛选后自动求和

一般都使用subtotal函数。 通过看一个大佬的视频&#xff0c;发现可以有更简单的方法。 首先任意筛选数据(ctrlshiftl)&#xff0c; 然后选中需要求和的列的最下方的空白单元格&#xff0c;再按alt。 回车即可。 实质它还是用的subtotal函数

【TiDB】TiDB CLuster部署

目录 0 大纲 一 集群部署工具TiUP简介 1 TiUP 简介 2 TiUP使用 3 TiUP使用举例 二 TiDB Cluster安装配置需求 1 生产环境硬件需求 2 操作系统需求 三 TIDB部署 1 软硬件需求以及前置检查​编辑 2 安装TiUP 组件 ​3 集群拓扑文件 4 执行部署命令 &#xff08;1&…

Spring Gateway网关服务分析

关键原理解析 基本原理 Spring Cloud Route核心可以概括为Gateway过滤器框架和Route定义和解析两块内容。 DefaultFilter、GatewayFilter、GlobalFilter 三种过滤器的区别及执行顺序 SpringCloud Gateway中的提到的过滤器包括三种类型&#xff1a; DefaultFilter&#xff1…

金融信贷行业如何准确——大数据精准定位获客渠道

通过大数据精准获客&#xff0c;不仅可以及时拦截网址浏览量&#xff0c;还可以访问移动贷款应用软件的高频活跃客户和新注册客户。此外&#xff0c;通过大数据进行准确的客户获取&#xff0c;还可以获得电话座机号码的实时通信记录&#xff0c;捕捉小程序应用程序和关键词搜索…

使用TS进行Vue-Router的Meta类型扩展

文章目录 1、前言2、解决 1、前言 使用Vue-Router时&#xff0c;会将一些字段信息附加到路由的Meta对象里面&#xff0c;比如图标icon&#xff0c;标题&#xff0c;权限等&#xff0c;如下&#xff1a; {path: /billboard/board/:boardId,name: billboardBoard,props: true,c…

【电路笔记】-基尔霍夫电路定律

基尔霍夫电路定律 文章目录 基尔霍夫电路定律1、框架和定义2、基尔霍夫电流定律3、基尔霍夫电压定律4、基尔霍夫定律应用5、基尔霍夫定律的局限性6、总结 在本文中&#xff0c;将介绍最基本、最重要的电路定律之一。 这些定律由德国医生古斯塔夫基尔霍夫 (Gustav Kirchoff) 于 …

apachesolr中简单使用

core使用 首先点击add core 可以看到报错solrconfig.xml不在new_core目录下&#xff0c;new_core是我们点击后自动创建的 那么我们将D:\solr2\solr-9.3.0\solr-9.3.0\server\solr\configsets下的任何一个目录下的conf拷贝到new_core过去 这里是使用_default下的conf目录拷贝…