计算机基础知识60

news2024/11/19 13:27:06

MySQL分组

# 概念:分组是按照某个指定的条件将单个单个的个体分成一个个整体

# MySQL分组的关键字:group by

# 分组一般配合聚合函数使用: sum max min avg count

        基本的语法格式:

                        group by 字段名 [having 条件表达式]

# 单独使用 group by关键字时,查询结果会只显示每个分组的第一条记录

# group by关键字可以和group_concat()函数一起使用。group_concat()函数会把每个分组的字段值都显示出来

多字段分组:

        即先按第一个字段分组,然后在第一个字段值相同的记录中,再根据第二个字段的值进行分组...一次类推

使用HAVING过滤分组:

        having关键字是对分组结果进行过滤。where关键字是对表数据进行过滤,两者同时存在时:肯定是先计算WHERE,WHERE排除的记录肯定是不会出现在分组内的

环境变量

# 概念: 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息

# 作用:通过在环境变量里面加入所有软件的安装路径,当我们想运行某一软件时双击其快捷方式或者在DOS界面输入软件名称,此时,计算机除了在其当前目录下寻找该软件的.exe文件外,还在环境变量中搜索软件的路径,找到,运行。

# 综上,Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

关于get请求能否携带请求体

# 地址栏中:get,post都能带

# 请求体:post ,get能不能呢?

        HTTP协议中没有明确规定GET请求是否能带body,市场上部分浏览器会不支持GET请求带body。HTTP 协议未定义 GET 请求的 body 语义,如果想用 GET 请求发送 body,得先为其定义语义,并确保上下游都能很好的支持。作为服务接口的提供方,不应该假设所有的调用方都能发出 GET 请求 body;作为调用方,不应该假设服务方能完美解析 GET 请求 body。

0.0.0.0和localhost和127.0.0.1 的区别

-127.0.0.1 是本地回环地址,只接受本地机器发起的连接请求。

-0.0.0.0 代表本机上所有的 IP 地址,监听所有相应的网络请求,绑定0.0.0.0有一定安全隐患

0.0.0.0

        IPV4中,0.0.0.0地址被用于表示一个无效的,未知的或者不可用的目标

        当一台主机还没有被分配一个IP地址的时候,用于表示主机本身,用作默认路由,表示”任意IPV4主机”。

localhost也叫local ,正确的解释是:本地服务器

        localhost是个域名,而不是一个ip地址。之所以我们经常把localhost与127.0.0.1认为是同一个是因为我们使用的大多数电脑上都讲localhost指向了127.0.0.1这个地址。

        是不经网卡传输,它不受网络防火墙和网卡相关的的限制,一般设置程序时本地服务用localhost是最好的,localhost不会解析成ip,也不会占用网卡、网络资源。

127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器)

        是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。

有时候用localhost可以,但用127.0.0.1就不可以的情况就是在于此:

        猜想localhost访问时,系统带的本机当前用户的权限去访问,而用ip的时候,等于本机是通过网络再去访问本机,可能涉及到网络用户的权限。

总结:

         127.0.0.1 是一个环回地址。并不表示“本机”。0.0.0.0才是真正表示“本网络中的本机”。在实际应用中,一般我们在服务端绑定端口的时候可以选择绑定到0.0.0.0,这样我的服务访问方就可以通过我的多个ip地址访问我的服务。

django请求生命周期

1、客户端浏览器向django服务端发送请求之后

2、首先回经过web网关接口,将客户端的请求解析成HTTP格式的数据封装到request对象中,解析后的数据回来到应用程序部分

3、首先会经过django的中间件,django自带了7个中间件,请求来的时候会经过每个中间件中的process_request方法,经过中间件之后才能到达真正的django后端。

4、请求会经过路由层,在进行路由匹配后执行对应的视图函数,在经过视图函数的业务逻辑后会产生response对象,响应对象也会通过中间件中的每个process_response方法,回到web服务网关接口,将response对象打包成HTTP格式的数据返回给客户端浏览器。

中间件题目

写个django项目---中间件

        取出用户访问的 user-agent和ip地址,(sqlite,mysql)建个表,存到表汇总     

        id  user-agent  ip

myzhong/appMyidd.py
from django.utils.deprecation import  MiddlewareMixin
from django.shortcuts import render,HttpResponse,redirect
from app01 import models
class MyMiddlew(MiddlewareMixin):


    def process_request(self, request):
        addr=request.META.get('REMOTE_ADDR')
        llq=request.META.get('HTTP_USER_AGENT')

        models.ShuJu.objects.create(ShuJu_REMOTE_ADDR=addr,ShuJU_HTTP_USER_AGENT=llq)

    def process_response(self, request, response):
        pass

        return response
setting.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'myzhong.appMyidd.MyMiddlew',
]
models.py
from django.db import models

# Create your models here.
class ShuJu(models.Model):
    # title varchar(64) unique
    ShuJu_REMOTE_ADDR = models.CharField(max_length=1000, verbose_name='IP')
    ShuJU_HTTP_USER_AGENT=models.CharField(max_length=2000,verbose_name='浏览器')

http协议补充

# http 基于tcp的---》可靠传输

http协议 0.9版本

客户端----》服务端
建立tcp的链接---》三次握手
客户端给服务端发送消息---》借助于tcp通道
服务端给客户端回消息----》借助于tcp通道
断开tcp的链接----》四次挥手

http 主流 1.1       keep-alive---》时间---》过了时间---》tcp就会断开

客户端同时发送两个http请求
客户端----》服务端
建立tcp的链接---》三次握手
---第一次请求----
客户端给服务端发送消息---》借助于tcp通道
服务端给客户端回消息----》借助于tcp通道
---第二次请求----
客户端给服务端发送消息---》借助于tcp通道
服务端给客户端回消息----》借助于tcp通道
断开tcp的链接----》四次挥手

http 2.x版本         多路复用

客户端同时发送5个http请求
客户端----》服务端
建立tcp的链接---》三次握手
tcp是流式协议---》一次带了一些数据 【请求1的数据,请求2的数据,请求3的数据,请求4的数据,请求5的数据 】
tcp的响应---》一次性带回来了

断开tcp的链接----》四次挥手

http 3.x版本          使用udp+协议 保证了可靠

web框架补充

# web 框架:

别人帮咱们写了一些基础代码,只需要在固定的位置写固定的代码,就能实现一个web应用

        Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

wsgi协议

客户端浏览器---------------------->python web框架之间通信需要遵循协议
发出来的是http请求符合wsgi协议的web服务器 django,flask  requset response

  基于这个协议的web服务器:
        wsgiref:django框架默认就用它,性能低,并发量低,测试阶段使用
        uwsgi:c语言写的
        gunicorn:python写的

  wsgi协议规定:

        web服务器后面的python框架一定是一个可调用的对象,

        必须接收两个参数(environ, start_response)

        environ它是个字典,里面全是http请求的东西

# 使用wsgiref写个web服务:

from wsgiref.simple_server import make_server

def mya(environ, start_response):
    print(environ)
    start_response('200 OK', [('Content-Type', 'text/html')])
    if environ.get('PATH_INFO') == '/index':
        with open('index.html','rb') as f:
            data=f.read()
    elif environ.get('PATH_INFO') == '/login':
        with open('login.html', 'rb') as f:
            data = f.read()
    else:
        data=b'<h1>Hello, web!</h1>'
    return [data]
# 可调用对象---》能加括号执行的对象
if __name__ == '__main__':
    myserver = make_server('', 8011, mya) # 请求来了---》经过wsgiref---》调用后面的可调用对象--》传入两个参数(environ, start_response)
    print('监听8011')
    myserver.serve_forever()

django概念

# MVC与MTV模型  --->所有web框架其实都遵循mvc架构

MVC模型(M:数据层)控制器(C:逻辑判断)视图(V:用户看到的)三层

      将代码拆到不同的位置,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求

MTV:M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
            T 代表模板 (Template):负责如何把页面展示给用户(html)。
            V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template

# 补充软件版本:
    3.6.小版本      后面小版本只做bug修改
    3.7.小版本        
 #  下载djagno:1.x  2.x  3.x  4.x     

     相关命令:

pip uninstall django  #卸载
pip3 install django==3.2.20
pip3 install django # 如果不指定版本就会装最新
django-admin startproject 项目名    # 命令创建
python  manage.py runserver 0.0.0.0:8080  # 启动项目

路由控制

概念

        URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行

# 使用path:准确路径,精准匹配,以后基本都是使用path

              re_path:就是原来的url,正则匹配,使用的非常少

              放在列表中:urlpatterns = [],列表中得数据,必须是 path或re_path执行完的结果

path详细使用

path('admin/', login)---》
等价于:_path(route, view, kwargs=None, name=None)

 第一个参数(route):准确路径,字符串,转换器
            -127.0.0.1:8080/login/justin

            -path('login/<str:name>', admin.site.urls),
            -视图函数中 def login(request,name)

path支持五种转换器:
 str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
 int,匹配正整数,包含0。
 slug,匹配字母、数字以及横杠、下划线组成的字符串。
 uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
 path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

第二个参数: 视图函数的内存地址,不要加括号
     路由一旦匹配成功,就会执行你写的这个视图函数(request),并且会把request对象传入
     如果有分组的参数[有名,无名],或者转换器的参数,都会被传递到视图函数中作为参数

                def login(request,name)
第三个参数:kwargs 是给视图函数传递默认参数
第四个参数:路径的别名,后期使用反向解析得到该路径

re_path的详细使用:
    第一个参数是正则表达式,其他参数一样
    path通过转换器能完成这个操作,后期用的很少,危险性大,原来之所以支持正则的目的是为了分组出参数
反向解析

        用在视图函数中,用在模板中

没有转换器的情况:
path('login/', login,name='login')
res=reverse('login')  #当时 定义路径传入的name参数对应的字符串
有转换器的情况:     
path('login/<str:name>', login,name='login')
res=reverse('login',kwargs={name:lqz})  #当时 定义路径传入的name参数对应的字符串
生成路径'login/lqz'

# 路由分发
为什么默认路由匹配就匹配到了 urls.py ?
        settings.py 有配置的
        ROOT_URLCONF = 'django_demo02.urls'
一个app自己有自己的路由,在app下创建urls.py 

视图层

views.py 这个文件,目前写的是视图函数

def 视图函数(request):
    return 四件套

#  request对象:
    它是http请求,是数据包-字符串形式给拆分成了django中得request对象
常用的:

request.path
request.method
request.GET
requets.POST
requets.body
request.get_full_path()  # 方法
request.files   # 前端携带文件过来---》转成了字典,根据文件的名字取到文件对象

不常用:

request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)。

request.cookie
request.session
request.content_type  # 提交的编码格式:urlencoded(form表单),json,form-data,text/plain(一般不用,浏览器默认的格式)
request.META: 请求头中得数据
    user-agent:HTTP_USER_AGENT
    referer:
    客户端ip地址:REMOTE_ADDR
    用户自定义的  
         定义:name=lqz
         取:request.META.get('HTTP_NAME')  # 前面加HTTP_ 把自定义的转成大写
         request.user  # auth
         request.is_ajax() 

# FBV和CBV:

       FBV开发模式 全名为: function based views , 是一种基于函数的视图调用,他的优点就是简单上手,不需要去继承函数, 所以我们也不需要去阅读很多底层代码,缺点就是不符合python的面向对象的思想, 也就是不可以去继承和多态。

# 登录验证
def login(request):
    message = ""
 
    if request.method == "POST":
        user = request.POST.get('username')
        pwd = request.POST.get('password')
        c = Administrator.objects.filter(username=user, password=pwd).count()
        if c:
            request.session['is_login'] = True
            request.session['username'] = user
            return redirect('/index.html')
        else:
            message = "用户名或密码错误"
 
    return render(request, 'login.html', {'msg': message})

        CBV开发模式, 全称为 class based views 是一种基于类的视图函数调用,符合python的面向对象思想, 可以完好的继承和多态, CBV开发模式将各种方式用函数分开,实现了功能的分离, 比如可以直接使用 get(), post() 之类的方法, 同时省去了我们用 if 进行逻辑的判断, 提高了代码的可读性

from django.shortcuts import render,HttpResponse
from django.views import View
 
class Login(View):
    def get(self,request):
        return HttpResponse("GET 方法")
 
    def post(self,request):
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        if user == "runoob" and pwd == "123456":
            return HttpResponse("POST 方法")
        else:
            return HttpResponse("POST 方法 1")

今日思维导图:

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

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

相关文章

机器学习与低代码:简化AI开发的未来

机器学习&#xff08;Machine Learning&#xff09;的应用如火如荼地扩展&#xff0c;其影响力和潜力在各行业得到了充分展现。然而&#xff0c;对于广大开发者和企业来说&#xff0c;机器学习模型的构建和部署并非易事&#xff0c;其中涉及的复杂过程和专业知识往往令人望而却…

苍穹外卖项目笔记(6)— Redis操作营业状态设置

1 在 Java 中操作 Redis 1.1 Redis 的 Java 客户端 Jedis&#xff08;官方推荐&#xff0c;且命令语句同 redis 命令&#xff09;Lettuce&#xff08;底层基于 Netty 多线程框架实现&#xff0c;性能高效&#xff09;Spring Data Redis&#xff08;对 Jedis 和 Lettuce 进行了…

深入理解强化学习——马尔可夫决策过程:备份图(Backup Diagram)

分类目录&#xff1a;《深入理解强化学习》总目录 在本文中&#xff0c;我们将介绍备份&#xff08;Backup&#xff09;的概念。备份类似于自举之间的迭代关系&#xff0c;对于某一个状态&#xff0c;它的当前价值是与它的未来价值线性相关的。 我们将与下图类似的图称为备份图…

HassOS使用nmcli设置静态IPv4地址及网关、DNS

目录 显示hass在使用的默认连接显示此连接的所有配置编辑hass默认连接添加静态IP地址添加DNS和网关删除DNS查看IPv4属性保存配置并退出nmcli重载配置 首先控制台登陆Home Assistant OS Welcome to Home Assistant homeassistant login:使用root用户登录&#xff08;无需密码&a…

Linux基础项目开发1:量产工具——显示系统(二)

前言&#xff1a; 前面我们已经对这个项目的基本框架有了一个初步的了解与认识&#xff0c;要实现显示管理器与输入管理器&#xff0c;有输入有输出基本就实现这个项目的大部分功能了&#xff0c;首先我们先来做显示系统&#xff0c;对于上层系统为了让程序更好扩展&#xff0c…

MySQL--日志

日志 错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysqld启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息 当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&#xff0c;默认…

Mysql 高级日志binlog、undoLog、redoLog 详解

数据更新流程与日志记录&#xff1a; undoLog&#xff1a; binLog&#xff1a; redoLog&#xff1a;

计算机毕业设计php+bootstrap小区物业管理系统

意义&#xff1a;随着我国经济的发展和人们生活水平的提高&#xff0c;住宅小区已经成为人们居住的主流&#xff0c;人们生活质量提高的同时&#xff0c;对小区物业管理的要求也越来越高&#xff0c;诸如对小区的维修维护&#xff0c;甚至对各项投诉都要求小区管理者做得好&…

INFINI Gateway 与华为鲲鹏完成产品兼容互认证

何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务&#xff08;含公有云、私有云、混合云、桌面云&#xff09;推出的一项合作伙伴计划&#xff0c;旨在为构建持续发展、合作共赢的鲲鹏生态圈&#xff0c;通过整合华为的技术、品牌资源&#xff0c;与合作伙伴共享商机和利…

SpringBoot——模板引擎及原理

优质博文&#xff1a;IT-BLOG-CN 一、模板引擎的思想 模板是为了将显示与数据分离&#xff0c;模板技术多种多样&#xff0c;但其本质都是将模板文件和数据通过模板引擎生成最终的HTML代码。 二、SpringBoot模板引擎 SpringBoot推荐的模板引擎是Thymeleaf语法简单&#xff0…

堆排序(详解)

在上篇文章中&#xff0c;我们说利用堆的插入和删除也可以排序数据&#xff0c;但排序的只是堆里面的数组&#xff1b;同时每次排序数据都要单独写一个堆的实现&#xff0c;很不方便&#xff0c;这次就来着重讲讲如何使用堆排序。 1.建堆 给了你数据&#xff0c;要利用堆对数据…

MIGO收货报替代“ZF002“, 步骤““ 中存在语法错误消息号 GB032错误

MIGO收货报替代"ZF002", 步骤"" 中存在语法错误消息号 GB032错误。替代"ZF002", 步骤"" 中存在语法错误消息号 GB032诊断 在 ABAP 代码生成过程中&#xff0c;在替代ZF002中发现了语法错误。 系统响应 未为该布尔陈述生成 ABAP 代码&…

nodejs之express学习(1)

安装 npm i express使用 // 导入 const express require(express) // 创建应用 const app express() // 创建路由 app.get(/home,(req,res)>{res.end("hello express") }) app.listen(3000,()>{console.log("服务已启动~") })路由的介绍 什么是…

P9231 [蓝桥杯 2023 省 A] 平方差(拆分问题)

分析&#xff1a;x(yz)*(y-z); yz 与 y-z 同奇偶性&#xff08;x要么为奇数&#xff0c;要么为偶数&#xff09; 奇数&#xff1a;1 与 其本身 乘积 偶数&#xff1a;2 与 x/2 乘积(为4的倍数) #include<bit…

【shell】多行重定向与免交互expect与ssh、scp的结合使用

目录 一、多行重定向 举例1&#xff1a;使用read命令接收用户的输入值会有交互过程 举例2&#xff1a;设置变量的值 举例3&#xff1a;创建用户密码 举例4&#xff1a;使用多行重定向写入文件中&#xff08;以repo文件举例&#xff09; 举例5&#xff1a;变量设定 二、免…

C/C++ 发送与接收HTTP/S请求

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本的协议。它是一种无状态的、应用层的协议&#xff0c;用于在计算机之间传输超文本文档&#xff0c;通常在 Web 浏览器和 Web 服务器之间进行数据通信。HTTP 是由互联网工程任务组&#xff08;IETF…

java编程强化练习(一)

1. 素数因子数字和 【问题描述】从键盘终端输入一个正的整数&#xff0c;求其所有素数因子各位上数字之和。例如&#xff1a;442*2*11&#xff0c;素数因子为2&#xff0c;2&#xff0c;11&#xff0c;和为22114 【输入形式】一个正的整数 【输出形式】整数的所有素数因子各位…

用通俗的方式讲解Transformer:从Word2Vec、Seq2Seq逐步理解到GPT、BERT

直到今天早上&#xff0c;刷到CSDN一篇讲BERT的文章&#xff0c;号称一文读懂&#xff0c;我读下来之后&#xff0c;假定我是初学者&#xff0c;读不懂。 关于BERT的笔记&#xff0c;其实一两年前就想写了&#xff0c;迟迟没动笔的原因是国内外已经有很多不错的资料&#xff0…

C语言基础程序设计题

1.个人所得税计算 应纳税款的计算公式如下&#xff1a;收入<&#xff1d;1000元部分税率为0&#xff05;&#xff0c;2000元>&#xff1d;收入>1000元的部分税率为5&#xff05;&#xff0c;3000元>&#xff1d;收入>2000元的部分税率为10&#xff05;&#xf…

【C语言加油站】函数栈帧的创建与销毁 #保姆级讲解

函数栈帧的创建与销毁 导言一、计算机硬件1.冯•诺依曼机基本思想2.冯•诺依曼机的特点&#xff1a;3.存储器3.1 分类3.2 内存的工作方式3.3 内存的组成 4.寄存器4.1 基本含义4.2 寄存器的功能4.3 工作原理4.4 分类4.4.1 通用寄存器组AX(AH、AL)&#xff1a;累加器BX(BH、BL)&a…