web开发前基础知识补充

news2024/11/16 7:23:22

什么是URL?

URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址;

互联网上的每个文件都有一个唯一的URL;

基本URL包含模式(或称协议)、服务器名称(或IP地址)路径和文件名

scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]

https://www.mi.com

在这里插入图片描述

http://i1.mifile.cn/a4/xmad_15481237431678_LbHXJ.jpg

在这里插入图片描述

https://docs.djangoproject.com/en/1.11/topics/http/urls/

在这里插入图片描述

url协议

​ http——超文本传输协议资源

​ https——用安全套接字层传送的超文本传输协议

​ ftp——文件传输协议

常见的HTTP请求方式

​ GET:可以用浏览器直接访问;请求可以携带参数,但是有长度限制;请求参数直接放在URL后面。

​ POST:不能使用浏览器直接访问;对请求参数的长度没有限制;可以用来上传文件等需求。

HTTP常见状态码

1xx :信息,服务器收到请求,需要请求者继续执行操作。
2xx :成功,操作被成功接收并处理。
3xx :重定向,需要进一步的操作以完成请求。
4xx :客户端错误,请求包含语法错误或无法完成请求。
5xx :服务器错误,服务器在处理请求的过程中发生了错误。

常见的HTTP状态码:

200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误

url配置和路由
from flask import Flask  

app = Flask(__name__)  

@app.route('/')  
@app.route('/index')

def hello_world():
    return 'Hello Flask!'


if __name__ == '__main__':
    app.run()  

其中hello_world这个函数叫做一个视图函数(view)

url与视图函数的关系

在这里插入图片描述

路由的配置
方式1:使用装饰器

​ 语法规则
​ @app.route(url,methods)

​ 参数解释
​ url:匹配的URL地址

​ methods:所支持的请求方式([‘GET’,‘POST’])

​ 示例:
​ @app.route(‘/login’,methods[‘GET’,‘POST’])

方式2:使用API配置

​ 语法规则

​ app.add_url_rule(url, url name, view_name)

​ 参数解释

​ url:匹配的URL地址
​ url_name:给URL的命名
​ view_name:视图函数

在这里插入图片描述

路由匹配规则

​ 匹配整个文字
​ @app.route(‘/hello’)

​ 传递参数
​ @app.route(‘/user/’)

​ 指定参数类型
​ @app.route(‘/post/int:post_id’)

url参数类型

在这里插入图片描述

查看url规则列表

​ app.url_map

URL逆向解析

​ 根据名称解析成URL字符串
​ <1>url_for(url_name,**kwargs)

​ <2>静态文件(js/css/图片)引用
​ url_for(‘static’,filename=‘style.css’)

视图函数中获取页面传值

URL中的值
@app.route(/page/‘)
def list_user(page):
URL中的值为可选
@app.route(/page/’)
def list_user(page=None):

from flask import Flask  

app = Flask(__name__)  

@app.route('/')  # 关键代码
@app.route('/index')

def hello_world():
    return 'Hello Flask!'

@app.route('/user/<page>')
def list_user(page):
    return '您好,您当前在第{}页'.format(page)

if __name__ == '__main__':
    app.run(debug=True)

打开 http://127.0.0.1:5000/

在这里插入图片描述

打开127.0.0.1:5000/user/1

在这里插入图片描述

打开127.0.0.1:5000/user/100

在这里插入图片描述

有个问题,不输入page会报错

在这里插入图片描述

可以在程序加入page的默认值和无page时的装饰器

@app.route('/user/')
@app.route('/user/<page>')
def list_user(page=1):
    return '您好,您当前在第{}页'.format(page)

这样,不输入page的话page默认为1

在这里插入图片描述

请求和响应

在这里插入图片描述

​ 在网页上输入127.0.0.1:5000/index,会向服务器发送请求,然后服务器返回响应,使该网址的页面上展示内容。

分派

在这里插入图片描述

​ 在网页上输入127.0.0.1:5000/index,找到对应的装饰器@app.route(‘/index’),再找到其后的视图函数进行执行。

上下文对象

​ 在分派请求之前激活应用上下文和请求上下文,在请求处理完成后将其删除。

在这里插入图片描述

应用上下文对象

current_app
当前应用的实例

from flask import Flask,current_app 

app = Flask(__name__)  

@app.route('/index')
def index():
    print(app)
    print(current_app)
    print(app==current_app)#True
    print(app is current_app)#False
    return 'index'

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

g

处理请求时的临时存储对象,每次请求都会重设这个变量

请求对象

request:请求对象,封装了客户端发出的HTTP请求中的内容

session:用户会话(dict),各请求之间的数据共享

在这里插入图片描述

请求报文常用参数

method:请求的类型(GET/POST/OPTION等)

form:POST请求数据dict
args:GET请求数据dict
values:POST请求和GET请求数据集合dict

files:上传的文件数据dict
cookies:请求中cookie dict
headers:HTTP请求头

请求报文练习—获取GET参数
from flask import Flask, render_template,request
import os

app = Flask(__name__)


@app.route('/')
def index():
    return 'index'


@app.route('/html')
def html():
    '''把html文件的内容在浏览器展现出来'''
    return render_template('index.html')


@app.route('/show/html')
def html_show():
    '''理解渲染机制'''
    file_name = os.path.join(os.path.dirname(__file__), 'templates', 'index.html')
    print(file_name)
    return file_name

@app.route('/test/req')
def test_request():
    '''请求报文练习'''
    get_args=request.args
    print(get_args)
    # page=request.args.get('page')
    #页码一定是正整数
    page = request.args.get('page',1)
    print('page',page)
    name=request.args.get('name')
    print('name',name)
    return 'request success'

if __name__ == '__main__':
    app.run(debug=True)

打开http://127.0.0.1:5000/test/req

在这里插入图片描述

http://127.0.0.1:5000/test/req?page=1&name=张三

在这里插入图片描述

请求报文练习—解析请求头中的IP地址
from flask import Flask, render_template, request
import os

app = Flask(__name__)


@app.route('/')
def index():
    return 'index'


@app.route('/test/req')
def test_request():
    '''请求报文练习'''
    get_args = request.args
    print(get_args)
    # page=request.args.get('page')
    # 页码一定是正整数
    page = request.args.get('page', 1)
    print('page', page)
    name = request.args.get('name')
    print('name', name)

    # 获取服务器所在的主机地址
    headers = request.headers
    # print(headers)
    print(headers.get('host'))  # 127.0.0.1:5000

    # 获取IP地址—实际业务中可进行恶意IP的拦截
    ip = request.remote_addr
    print('远程IP地址\n', ip)  # 127.0.0.1

    # 获取uer_agent
    user_agent=request.headers.get('User-Agent',None)

    print('uer_agent信息\n',user_agent)
    #Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36


    return 'request success'


if __name__ == '__main__':
    app.run(debug=True)

在这里插入图片描述

请求钩子

思考:如下场景如何实现?
<1>每个请求中都要验证用户信息(是否已登,是否有权限访问)
<2>限制来着某些IP的恶意请求

使用钩子函数可以减少重复代码的编写,便于维护

​ before_first_request
​ 服务器初始化后第一个请求到达前执行
​ before_request
​ 每一个请求到达前执行

@app.before_first_request
def first_request():
    """服务器启动后第一个请求到达"""
    print('first request')


@app.before_request
def per_request():
    """每一个请求到达前"""
    print('before request')

服务器重启打印first request,每次访问都会打印before request

在这里插入图片描述

其它

after request每次请求处理完成后执行,如果请求过程中产生了异常,则不执行;

teardown_request每次请求处理完成之后执行,如果请求过程中产生了异常也执行。

响应

​ 可以是字符串,可以是元组(tuple),(response,status,headers)或(response,headers)

<1>response——响应内容

<2>status——响应状态码

@app.route('/tet/response')
def test_response():
    """测试响应"""
    return 'response success', 201

<3>headers——响应头信息

@app.route('/tet/response')
def test_response():
    """测试响应"""
    return 'response success', 201,{'user_id':'my_id'}

在这里插入图片描述

使用make response代替以上(更简单)

from flask import Flask,  request,make_response
@app.route('/tet/response')
def test_response():
    """测试响应"""
    # return 'response success', 201,{'user_id':'my_id'}
    #构造一个响应对象
    resp=make_response('这是一个响应对象',403,{'token':'abcdef0001'})
    resp.headers['user_id'] = 'my_id_0001'
    #resp.status_code = 200
    return resp

在这里插入图片描述

响应html

@app.route('/tet/response')
def test_response():
    #响应html
    html="<html><body><h1 style='color:#foo'>HTML文本显示</h1></body></html>"
    resp=make_response(html)
    return resp

在这里插入图片描述

实际使用中,将htm写到程序中太繁琐,通常通过从文件中响应html:

from flask import Flask, render_template, request,make_response

@app.route('/tet/resp/html')
def test_html():
    """从文件中响应html"""
    html=render_template('index.html')
    resp=make_response(html,400)
    return resp

在这里插入图片描述

在这里插入图片描述

重定向

理解

​ 比如在登陆状态,发表评论,突然退出了登陆状态,网页被重定向到首页。

redirect()实现重定向

在这里插入图片描述

abort()处理错误
from flask import Flask, abort

@app.route('/')
def shouye():
    abort(404)

在这里插入图片描述

from flask import Flask, abort

@app.route('/')
def shouye():
    abort(403)

在这里插入图片描述

触发403警告时,展示指定内容

@app.errorhandler(403)
def forbidden_page(err):
    """无权限访问界面"""
    print(err)
    return '您没有权限访问本页面,请联系管理员进行权限开通'

在这里插入图片描述

ip拦截

@app.route('/')
def shouye():
    ip_list_forbidden =['127.0.0.2']#ip黑名单
    ip=request.remote_addr#获取用户ip
    if ip in ip_list_forbidden:
        abort(403)
    return 'hello'
    
@app.errorhandler(403)
def forbidden_page(err):
    """无权限访问界面"""
    print(err)
    return '您没有权限访问本页面,请联系管理员进行权限开通'

在这里插入图片描述

@app.route('/')
def shouye():
    ip_list_forbidden =['127.0.0.1']#ip黑名单
    ip=request.remote_addr#获取用户ip
    if ip in ip_list_forbidden:
        abort(403)
    return 'hello'
    
@app.errorhandler(403)
def forbidden_page(err):
    """无权限访问界面"""
    print(err)
    return '您没有权限访问本页面,请联系管理员进行权限开通'

在这里插入图片描述

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

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

相关文章

Kafka使用MirrorMaker同步数据的两种方式

1.前言 MirrorMaker 是 Kafka官方提供的跨数据中心的流数据同步方案。原理是通过从 原始kafka集群消费消息&#xff0c;然后把消息发送到 目标kafka集群。操作简单&#xff0c;只要通过简单的 consumer配置和 producer配置&#xff0c;然后启动 Mirror&#xff0c;就可以实现准…

不喜欢现在的工作,如何成功转行?

对现有行业职业公司不满、不喜欢&#xff0c;感觉此路不通&#xff0c;想换个跑道再战&#xff01; 我想说&#xff0c;请先冷静一下。 我有两个认识的人&#xff0c;一个成功转行&#xff0c;另一个失败。后面会有我的分析~~ 我的一位女性朋友A&#xff0c;小公司里工作近1…

00后的他为何能年薪30w,转行真的很难吗?

网上有很多人经常在讨论转行&#xff0c;有的人说转行很难&#xff0c;有的却说不难&#xff0c;到底是怎样呢&#xff1f;我来说一个我身边发生的这么一个事实吧&#xff01; 我之前接触过一个00后&#xff0c;他不同于别人&#xff0c;网上大多说00后是看老板不爽就直接不干…

unidbg入门级案例-某航空app_hnairSign分析

今天要分析的是某航空app&#xff0c;版本号是8.19.0&#xff0c;分析的样本在文章底部会提供&#xff0c;这次我们要借用unidbg 来辅助进行算法还原。 有关unidbg的介绍笔者就不做过多的描述&#xff0c;大家可自行百度查询。 该样本的so比较简单&#xff0c;但重点是记录分析…

多标签分类怎么做?(Python)

一、基本介绍 首先简单介绍下&#xff0c;多标签分类与多分类、多任务学习的关系&#xff1a; 多分类学习&#xff08;Multi-class&#xff09;&#xff1a;分类器去划分的类别是多个的&#xff0c;但对于每一个样本只能有一个类别&#xff0c;类别间是互斥的。例如&#xff1…

electron:获取MAC地址

一、背景 当我们需要用户“使用指定设备”访问程序的时候&#xff0c;我们需要获取用户设备的固定的id&#xff0c;设备id用户id实现业务需求&#xff0c;这个所谓的id就是MAC地址。 对于其他方法&#xff1a; uuid&#xff1a;uuid是一个唯一的字符串&#xff0c;可以存放到…

深度融合钉钉PaaS,授客学堂助力企业实现培训数字化

方案简介 授客学堂将企业培训领域的经验与钉钉开放能力深度融合&#xff0c;通过集成钉钉人事一体、酷应用、IM底座、待办等多种开放能力&#xff0c;实现学员培训数据实时互通&#xff0c;为客户提供更新更酷的能力&#xff0c;高效解决企业培训的数字化服务。 方案场景 在…

tensorflow feature_columns

总结来说&#xff1a; feature_column定义了一种数据预处理的方式&#xff0c;可以看作是一种格式&#xff0c;指定了key&#xff0c;用于后续读取输入流中对应列的数据feature_column不是tensor&#xff0c;所以如果在下一步应用到模型中是需要tensor&#xff0c;还需要通过f…

非互联网人士如何转行互联网?

结论是&#xff0c;具备互联网式的做事思维积累互联网项目经验。我靠着这个方法从一名传统销售顺利转行&#xff0c;&#xff08;之前没有任何互联网工作经验&#xff09;入职了一家互联网公司做用户运营&#xff0c;半年前跳槽成为一个4人运营小团队的leader。 在分享我自身的…

我国丁辛醇行业现状:上游丙烯供给充足 下游需求下滑 市场出现高差价现象

根据观研报告网发布的《中国丁辛醇行业发展深度分析与投资前景研究报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;丁辛醇是一种丁醇和辛醇合成的有机物&#xff0c;无色透明、易燃的油状液体&#xff0c;具有特殊的气味&#xff0c;能与水及多种化合物形成共沸物&…

服务器IPMI(BMC)装机

将网线连接服务器的控制口与PC&#xff0c;服务器的控制口默认IP为192.168.100.100&#xff0c;网关默认为192.168.100.1&#xff0c;将PC的IP修改为与服务器控制口相同网段。打开浏览器&#xff0c;输入https://19168.100.100&#xff0c;进入IPMI登录界面。账号密码需要找运维…

Apache Airflow Hive Provider <5.0.0 存在操作系统命令注入漏洞

漏洞描述 Apache Airflow 是一个用于以编程方式创作、安排和监控工作流平台。Apache Airflow Hive Provider 是一个使用 SQL 读取、写入和管理分布式存储中的大型数据集的工具包。 Apache Airflow Hive Provider 在 5.0.0 之前的版本中由于对airflow/providers/apache/hive/h…

Stm32标准库函数6——f103 PWM 电调(50Hz)

#include "stm32f10x.h" #include "delay.h" TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; u16 Ppm; /************************************************* 函数: void RCC_Configuration(void) 功能: 配…

D. Friends and Subsequences Codeforces Round #361 (Div. 2)RMQ+二分 单调队列

题目传送门 题意为 给定两个长度为n的数组&#xff0c;设为a数组和b数组&#xff0c;需要找到所有可能的区间中&#xff0c;a数组的最大值等于b数组的最小值的个数。 1&#xff1a;RMQ 二分 RMQ 能找到一个数组在任意区间的最大值或者最小值&#xff0c;只需要在O(n)的时间…

【Java基础知识复盘】HashMap篇——持续更新中

本人知识复盘系列的博客并非全部原创&#xff0c;大部分摘自网络&#xff0c;只是为了记录在自己的博客方便查阅&#xff0c;往后也会陆续在本篇博客更新本人查阅到的新的知识点&#xff0c;望悉知&#xff01; HashMap 概述 HashMap 是一个散列表&#xff0c;它存储的内容是…

hashMap相关

文章目录HashMapHashMap介绍HashMap在 JDK1.7和 JDK1.8中的区别JDK1.7中HashMap头插法死循环的原因HashMap的底层原理HashMap的扩容机制解决Hash冲突的方法为什么在解决hash冲突的时候选择先用链表&#xff0c;再转红黑树?HashMap为什么线程不安全一般用什么作为HashMap的key?…

程序员需要达到什么水平才能顺利拿到 20k 无压力?

很有趣的是&#xff0c;在程序员身上&#xff0c;我看到了最明显&#xff0c;也最有趣的贫富差距。 根据2022最新版大厂新入职员工职级对应表&#xff0c;大厂技术线的员工轻而易举地拿到了20w的水平&#xff0c;而只要往上够一够&#xff0c;30w也不是什么难事。 然而&#xf…

玩转云服务器:怎样用云服务器架设大型3D魔幻手游【魔域】服务器,实现联机多人同玩,带你一起搞机,了解游戏搭建过程,详细教程

准备工作&#xff1a; 你首先要准备一台云服务器&#xff01; 服务器配置&#xff1a;2核4G以上配置&#xff01; 服务器系统&#xff1a;win2012 开始搭建&#xff1a; 下载游戏服务端&#xff08;有些多人叫源码&#xff0c;这里我就不解释了&#xff0c;喜欢怎么叫就怎…

SpringCloud Alibaba | 网关(三) : SpringCloudGateway 过滤器获取application/json中body数据

SpringCloudGateway 过滤器获取application/json中body数据一、前言二、通过cachedRequestBodyObject缓存获取三、ServerHttpRequest getBody方法获取四、(*&#xffe3;︶&#xffe3;)一、前言 项目接口需要加解密,就在网关层进行解密操作。那么问题来了怎么在gateway 的filt…

基于松鼠算法改进的DELM预测-附代码

松鼠算法改进的深度极限学习机DELM的回归预测 文章目录松鼠算法改进的深度极限学习机DELM的回归预测1.ELM原理2.深度极限学习机&#xff08;DELM&#xff09;原理3.松鼠算法4.松鼠算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考&#xff1a;https:…