Python自动化运维:Django之View视图和Template

views详解

http请求中产生两个核心对象:
http请求:HttpRequest对象
http响应:HttpResponse对象
(1) HttpRequest对象
当请求一个页面时,Django 创建一个 HttpRequest对象包含原数据的请求。然后 Django 加载适当的视图,通过 HttpRequest作为视图函数的第一个参数。每个视图负责返回一个HttpResponse目标。

path:       请求页面的全路径,不包括域名method:     请求中使用的HTTP方法的字符串表示。全大写表示。例如if  req.method=="GET":do_something()elseif req.method=="POST":do_something_else()
GET:         包含所有HTTP GET参数的类字典对象
POST:       包含所有HTTP POST参数的类字典对象服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用if req.POST来判断是否使用了HTTP POST 方法;应该使用  if req.method=="POST"
COOKIES:     包含所有cookies的标准Python字典对象;keys和values都是字符串。
FILES:      包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中 name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:filename:      上传文件名,用字符串表示content_type:   上传文件的Content Typecontent:       上传文件的原始内容
user:       是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你可以通过user的is_authenticated()方法来辨别用户是否登陆:if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware时该属性才可用
session:    唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
META:       一个标准的Python字典包含所有可用的HTTP头。可用标题取决于客户端和服务器,但这里是一些例子:CONTENT_LENGTH       – 请求体的长度(一个字符串)。CONTENT_TYPE         – 请求体的类型。HTTP_ACCEPT          - 为响应–可以接受的内容类型。HTTP_ACCEPT_ENCODING – 接受编码的响应HTTP_ACCEPT_LANGUAGE – 接受语言的反应HTTP_HOST            – 客户端发送的HTTP主机头。HTTP_REFERER         – 参考页面HTTP_USER_AGENT      – 客户端的用户代理字符串。QUERY_STRING         – 查询字符串,作为一个单一的(分析的)字符串。REMOTE_ADDR          – 客户端的IP地址REMOTE_HOST          – 客户端的主机名REMOTE_USER          – 用户通过Web服务器的身份验证。REQUEST_METHOD       – 字符串,如"GET"或"POST"SERVER_NAME          – 服务器的主机名SERVER_PORT          – 服务器的端口(一个字符串)。

(2)HttpResponse对象
对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。
在HttpResponse对象上扩展的常用方法:
    页面渲染:render(推荐),render_to_response,
    页面跳转:redirect
    locals:   可以直接将对应视图函数中所有的变量传给模板   get():如果key对应多个value,get()返回最后一个value。

23e182e6d901c9b1d8515184423ecc60.png

值得注意的是对于页面渲染的方法中,render和render_to_response使用方法和功能类似,但是render功能更为强大,推荐使用
3. render()
render(request, template_name, context=None, content_type=None, status=None, using=None)[source]
结合给定的模板与一个给定的上下文,返回一个字典HttpResponse在渲染文本对象
所需的参数
 template_name 一个模板的使用或模板序列名称全称。如果序列是给定的,存在于第一个模板将被使用。
可选参数

context    一组字典的值添加到模板中。默认情况下,这是一个空的字典。
content_type    MIME类型用于生成文档。
status    为响应状态代码。默认值为200
using    这个名字一个模板引擎的使用将模板。
def register(request):'''request就是HttpRequest对象HttpResponse常用的扩展对象render:页面渲染,可将参数以字典的形式传递给页面 也可以通过locals()将参数传递过去,没有进行页面跳转,url没有改变redirect:页面跳转,url发生改变:param request::return:'''# 获取请求方法if request.method == "GET":'''对注册来分析,当我们进入注册页面的时候,一般都是GET请求'''# 获取GET里面的信息ret = request.GETprint("GET信息",ret)  # 输出 GET信息 <QueryDict: {}> 是一个字典对象return render(request,"register.html")elif request.method == "POST":'''通过表单提交之后,变成了POST请求'''# 获取POST里面的信息ret = request.POSTprint("POST信息",ret)'''输出  POST信息 <QueryDict: {'csrfmiddlewaretoken': ['oeKNHGKKm9Ip6B4Y2bfZM16lD2ECoTylPzX7rKzEUO5baf5Dfw4uB2zz5zz61fL9'], 'username': ['Jason'], 'pwd': ['123'], 'gender': ['1']}>也是一个字典对象,可以通过句点获取表单提交过来的数据'''return redirect("/login/")def login(request):return render(request,"login.html")

模板系统Template
组成:HTML代码+逻辑控制代码
逻辑控制代码的组成:
1、变量,使用双大括号来引用变量:` var_name `

# 视图函数
def index(request):people={"username":"Jason","age":18,"gender":"男"}username="Jason"return render(request,"index.html",{"username":username,"people":people})
<!--模板文件-->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><!--通过双大括号来获取变量--><h1>欢迎{{ username }}</h1><!--通过句点符号来实现深度查询--><h2>用户名:{{ people.username }}</h2><h2>年龄:{{ people.age }}</h2><h2>性别:{{ people.gender }}</h2>
</body>
</html>

2、过滤器,语法格式:{{obj|filter:param}}
(1)add   
    使用形式为:{{ value | add: "2"}}
    意义:将value的值增加2
(2)addslashes
    使用形式为:{{ value | addslashes }}
    意义:在value中的引号前增加反斜线
(3)capfirst
    使用形式为:{{ value | capfirst }}
    意义:value的第一个字符转化成大写形式
(4)cut
    使用形式为:{{ value | cut:arg}}, 例如,如果value是“String with spaces” arg是" "那么输出是"Stringwithspaces"
    意义:从给定value中删除所有arg的值
(5)date
    使用形式为::
        (a) {{ value | date:"D d M Y" }},例如,如果value是一个datetime对象(datetime.datetime.now())那么输出将是字符串"Wed 09 Jan 2008"
        (b) {{ value | date }},这种形式没有格式化字符串,这时候,格式化字符串会自动采用DATE_FORMAT所设置的形式。
    意义:将日期格式数据按照给定的格式输出

(6)default
     使用形式:{{ value | default: "nothing" }},例如,如果value是“”,那么输出将是nothing
     意义:如果value的意义是False,那么输出使用缺省值
(7)default_if_none
     使用形式:{{ value | default_if_none:"nothing" }},例如,如果value是None,那么输出将是nothing
     意义:如果value是None,那么输出将使用缺省值
(8)dictsort
    意义:如果value的值是一个字典,那么返回值是按照关键字排序的结果
            使用形式:{{ value | dictsort:"name"}},例如,
            如果value是:

      [{'name': 'zed', 'age': 19},{'name': 'amy', 'age': 22},{'name': 'joe', 'age': 31},]那么,输出是:[{'name': 'amy', 'age': 22},{'name': 'joe', 'age': 31},{'name': 'zed', 'age': 19},]

(9)dictsortreversed
   意义:如果value的值是一个字典,那么返回值是按照关键字排序的结果的反序
   使用形式:与上述(8)完全相同。
(10)divisibleby
   使用形式:{{ value | divisibleby:arg}},如果value是21,arg是3,那么输出将是True
   意义:如果value能够被arg整除,那么返回值将是True
(11)escape
   使用形式:{{ value | escape}}
   意义:替换value中的某些字符,以适应HTML格式,包括:

    < is converted to &lt;> is converted to &gt;' (single quote) is converted to &#39;" (double quote) is converted to &quot;& is converted to &amp;

escape仅仅在输出的时候才起作用,所以escape不能够用在链式过滤器的中间,
他应该总是最后一个过滤器,如果想在链式过滤器的中间使用,那么可以使用force_escape

(12)escapejs
   使用形式:{{ value | escapejs }}
   意义:替换value中的某些字符,以适应JAVASCRIPT和JSON格式。
(13)filesizeformat
   使用形式:{{ value | filesizeformat }}
   意义:格式化value,使其成为易读的文件大小,例如:13KB,4.1MB等。
(14)first
   使用形式:{{ value | first }}
   意义:返回列表中的第一个Item,例如,如果value是列表['a','b','c'],那么输出将是'a'。
(15)floatformat
   使用形式:{{ value | floatformat}}或者{{value|floatformat:arg}},
   arg可以是正数也可以是负数。没有参数的floatformat相当于floatformat:-1
   (1)如果不带arg,那么引擎会四舍五入,同时最多只保留一位小数。

    34.23234    {{value|floatformat}}    34.234.00000    {{value|floatformat}}    3434.26000    {{value|floatformat}}    34.3


   (2)如果arg是正数,那么引擎会四舍五入,同时保留arg位的小数。

      34.23234    {{value|floatformat:3}}    34.23234.00000    {{value|floatformat:3}}    34.00034.26000    {{value|floatformat:3}}    34.260


   (3)如果arg是负数,那么引擎会四舍五入,如果有小数部分,那么保留arg位小数;否则,则没有任何小数部分。

    34.23234    {{value|floatformat:"-3"}}    34.23234.00000    {{value|floatformat:"-3"}}    3434.26000    {{value|floatformat:"-3"}}    34.26

(16)get_digit
   使用形式:{{ value | get_digit:"arg"}},例如,如果value是123456789,arg是2,那么输出是8
   意义:给定一个数字,返回,请求的数字,记住:1代表最右边的数字,如果value不是合法输入,
         那么会返回所有原有值。
(17)iriencode
   使用形式:{{value | iriencode}}
   意义:如果value中有非ASCII字符,那么将其进行抓化成URL中适合的编码,如果value已经进行过URLENCODE,
         改操作就不会再起作用。
(18)join
   使用形式:{{ value | join:"arg"}},如果value是['a','b','c'],arg是'//'那么输出是a//b//c
   意义:使用指定的字符串连接一个list,作用如同python的str.join(list)
19)last
   使用形式:{{ value | last }}
   意义:返回列表中的最后一个Item
20)length
   使用形式:{{ value | length }}
   意义:返回value的长度。
(21)length_is
   使用形式:{{ value | length_is:"arg"}}
   意义:返回True,如果value的长度等于arg的时候,例如:如果value是['a','b','c'],arg是3,那么返回True
22)linebreaks
   使用形式:{{value|linebreaks}}
   意义:value中的"\n"将被<br/>替代,并且整个value使用</p>包围起来,从而适和HTML的格式
(23)linebreaksbr
   使用形式:{{value |linebreaksbr}}
   意义:value中的"\n"将被<br/>替代
(24)linenumbers
   使用形式:{{value | linenumbers}}
   意义:显示的文本,带有行数。
(25)ljust
   使用形式:{{value | ljust}}
   意义:在一个给定宽度的字段中,左对齐显示value
(25)center
   使用形式:{{value | center}}
   意义:在一个给定宽度的字段中,中心对齐显示value 
(25)rjust
   使用形式:{{value | rjust}}
   意义:在一个给定宽度的字段中,右对齐显示value
(26)lower
   使用形式:{{value | lower}}
   意义:将一个字符串转换成小写形式
(27)make_list
   使用形式:{{value | make_list}}
   意义:将value转换成一个list,对于字符串,转换成字符list;对于整数,转换成整数list
   例如value是Joel,那么输出将是[u'J',u'o',u'e',u'l'];value是123,那么输出将是[1,2,3]
(28)pluralize
   使用形式:{{value | pluralize}},或者{{value | pluralize:"es"}},或者{{value | pluralize:"y,ies"}}
   意义:如果value不是1,则返回一个复数后缀,缺省的后缀是's'
(29)random
   使用形式:{{value | random}}
   意义:从给定的list中返回一个任意的Item
(30)removetags
   使用形式:{{value | removetags:"tag1 tag2 tag3..."}}
   意义:删除value中tag1,tag2....的标签。例如,如果value是<b>Joel</b> <button>is</button> a <span>slug</span>
        tags是"b span",那么输出将是:Joel <button>is</button> a slug
(31)safe
   使用形式:{{value | safe}}
   意义:当系统设置autoescaping打开的时候,该过滤器使得输出不进行escape转换
 (32)safeseq
   与上述safe基本相同,但有一点不同的就是:safe是针对字符串,而safeseq是针对多个字符串组成的sequence
(33)slice
   使用形式:{{some_list | slice:":2"}}
   意义:与python语法中的slice相同,:2表示第一的第二个元素
 (34)slugify
    使用形式:{{value | slugify}}
    意义:将value转换成小写形式,同事删除所有分单词字符,并将空格变成横线
        例如:如果value是Joel is a slug,那么输出将是joel-is-a-slug
(35)stringformat
    这个不经常用,先不说
(36)striptags
   使用形式:{{value | striptags}}
   意义:删除value中的所有HTML标签
(37)time
   使用形式:{{value | time:"H:i"}}或者{{value | time}}
   意义:格式化时间输出,如果time后面没有格式化参数,那么输出按照TIME_FORMAT中设置的进行。
(38)title
   转换一个字符串成为title格式。
(39)truncatewords
    使用形式:{{value | truncatewords:2}}
    意义:将value切成truncatewords指定的单词数目
    例如,如果value是Joel is a slug 那么输出将是:Joel is ...
(40)truncatewords_html
    使用形式同(39)
    意义:truncation点之前如果某个标签打开了,但是没有关闭,那么在truncation点会立即关闭。
        因为这个操作的效率比truncatewords低,所有只有在value是html格式时,才考虑使用。
(41)upper
   转换一个字符串为大写形式
(42)urlencode
    将一个字符串进行URLEncode
(43)urlize
    意义:将一个字符串中的URL转化成可点击的形式。
    使用形式:{{ value | urlize }}
    例如,如果value是Check out www.djangoproject.com,那么输出将是:

 Check out <a href="http://www.djangoproject.com">www.djangoproject.com</a>

(44)urlizetrunc
    使用形式:{{ value | urlizetrunc:15}}
    意义:与(43)相同,但是有一点不同就是现实的链接字符会被truncate成特定的长度,后面以...现实。
(45)wordcount
   返回字符串中单词的数目
(46)wordwrap
    使用形式:{{value | wordwrap:5}}
    意义:按照指定的长度包装字符串
    例如,如果value是Joel is a slug,那么输出将会是:

    Joelis aslug


(47)timesince
    使用形式:{{value | timesince:arg}}
    意义:返回参数arg到value的天数和小时数
    例如,如果 blog_date 是一个日期实例表示 2006-06-01 午夜, 而 comment_date 是一个日期实例表示 2006-06-01 早上8点,
          那么 {{ comment_date|timesince:blog_date }} 将返回 "8 hours".
(48)timeuntil
    使用形式:{{value | timeuntil}}
    意义:与(47)基本相同,一个不同点就是,返回的是value距离当前日期的天数和小时数

3、标签,语法格式:{% tags %}

# views函数
def index(request):temp_list=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]return render(request,"index.html",{"temp_list":temp_list})
<!--HTML模板-->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--标签的使用-->
<!--对于for来说,不支持中断循环,也不支持continue语句,内置一个forloop模板变量forloop.counter表示循环的次数forloop.first当第一次循环的时候,为True
-->
{% for temp in temp_list %}<!--对于if来说,不允许同一标签里同时出现and和or,这样容易产生歧义-->{% if temp == "星期一" or temp == "星期三" or temp == "星期五" or temp == "星期日"%}<h2>不上班</h2>{% elif temp == "星期二" or temp == "星期四"%}<h3>上班</h3>{% else %}<h1>吃大餐</h1>{% endif %}{% empty %}
<!--当temp_list为空,会走这里,和for循环并列--><h1>放假时间太多了</h1>
{% endfor %}
<!-- 其他标签: {% csrf_token %}:用于生成csrf_token标签,用于防止跨站攻击验证,如果在views中用的是render_to_response方法 则不会生效,一般会和表单一起提交给后台 {% url "reg" %}:引用路由配置的地址,也就是路由中的name值,如: <form method="post" action="{% url "reg" %}"> ... </form> url(r"^register",views.register,name='reg') {% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}:使用更简单的变量名代替复杂的变量名{% verbatim %} {% endverbatim %}:禁止render{% load tz %}:加载标签库 --> </body> 
</html>

4、自定义filter和simple_tag
步骤:
a:在app中创建tempaltetags模块
b:创建任意的.py文件,如:my_tags.py
c:在使用自定义simple_tag和filter的html文件中导入之前创建的my_tags.py:{% load my_tags %}
d:使用simple_tag和filter

#自定义标签和过滤器
from django import template
register = template.Library()   # regsiter 的名字是固定的,不可改变
@register.filter()
def filter_multi(x,y):'''自定义过滤器:param x: 模板中过滤器左边的参数:param y: 模板中过滤器右边的参数:return:'''return x*ydef simple_tag_multi(x,y):'''自定义标签:param x::param y::return:'''return x*y
# views函数
def index(request):age = 18return render(request,"index.html",{"age":age})<!--引入自定义标签-->
{% load my_tags %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><!--自定义filter限制参数个数,只能传递一个参数,比如只能传2,可以用在控制语句中--><h1>{{ age|filter_multi:2 }}</h1><!--自定义tag不限制参数个数 但是不能用在控制语句中--><h1>{% simple_tag_multi 3 5 %}</h1>
</body>
</html>

5、模板继承extends
    {% include %}:该标签允许在当前模板中包含其他模板,标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串


{% endblock %}


本文转自 炫维 51CTO博客,原文链接:
http://blog.51cto.com/xuanwei/1980449

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

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

相关文章

leetcode491. 递增子序列(回溯算法)

给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 代码 class Solution {List<List<Integer>>…

java重入锁,再探JAVA重入锁

之前的文章中简单的为大家介绍了重入锁JAVA并发之多线程基础(2)。这里面也是简单的为大家介绍了重入锁的几种性质&#xff0c;这里我们就去探索下里面是如何实现的。我们知道在使用的时候&#xff0c;必须锁先有定义&#xff0c;然后我们再拿着当前的锁进行加锁操作&#xff0c…

azure服务器_如何使用Azure Functions和SendGrid构建无服务器报表服务器

azure服务器It’s 2018 and I just wrote a title that contains the words “Serverless server”. Life has no meaning.那是2018年&#xff0c;我刚刚写了一个标题&#xff0c;其中包含“无服务器服务器”一词。 生活没有意义。 Despite that utterly contradictory headli…

【GoWeb开发实战】Cookie

cookie Web开发中一个很重要的议题就是如何做好用户的整个浏览过程的控制&#xff0c;因为HTTP协议是无状态的&#xff0c;所以用户的每一次请求都是无状态的&#xff0c;我们不知道在整个Web操作过程中哪些连接与该用户有关&#xff0c;我们应该如何来解决这个问题呢&#xff…

PhotoKit 照片库的管理-获取图像

PHAsset部分属性解析 1、HDR 和全景照片 mediaSubtypes 属性验证资源库中的图像在捕捉时是否开启了 HDR&#xff0c;拍摄时是否使用了相机应用的全景模式。 2、收藏和隐藏资源 要验证一个资源是否被用户标记为收藏或被隐藏&#xff0c;只要检查 PHAsset 实例的 favorite 和 hid…

cmail服务器安装后无法登录的解决办法

安装cmailserver 5.4.6软件安装、注册都非常顺利&#xff0c;webmail页面也都正常打开&#xff0c;但是一点“登录”就提示错误&#xff1a; Microsoft VBScript 运行时错误 错误 800a01ad ActiveX 部件不能创建对象: CMailCOM.POP3.1 /mail/login.asp&#xff0c;行 42 点“…

matlab对人工智能,MATLAB与人工智能深度学习和机器学习.PDF

MATLAB与人工智能深度学习和机器学习MATLAB 与人工智能&#xff1a;深度学习有多远&#xff1f;© 2017 The MathWorks, Inc.1机器学习8机器学习无处不在▪ 图像识别 [TBD]▪ 语音识别▪ 股票预测▪ 医疗诊断▪ 数据分析▪ 机器人▪ 更多……9什么是机器学习&#xff1f;机…

leetcode1471. 数组中的 k 个最强值(排序)

给你一个整数数组 arr 和一个整数 k 。 设 m 为数组的中位数&#xff0c;只要满足下述两个前提之一&#xff0c;就可以判定 arr[i] 的值比 arr[j] 的值更强&#xff1a; |arr[i] - m| > |arr[j] - m| |arr[i] - m| |arr[j] - m|&#xff0c;且 arr[i] > arr[j] 请返回…

Spring中WebApplicationInitializer的理解

现在JavaConfig配置方式在逐步取代xml配置方式。而WebApplicationInitializer可以看做是Web.xml的替代&#xff0c;它是一个接口。通过实现WebApplicationInitializer&#xff0c;在其中可以添加servlet&#xff0c;listener等&#xff0c;在加载Web项目的时候会加载这个接口实…

使用fetch封装请求_关于如何使用Fetch API执行HTTP请求的实用ES6指南

使用fetch封装请求In this guide, I’ll show you how to use the Fetch API (ES6) to perform HTTP requests to an REST API with some practical examples you’ll most likely encounter.在本指南中&#xff0c;我将向您展示如何使用Fetch API(ES6 )来执行对REST API的 HTT…

hadoop集群中客户端修改、删除文件失败

这是因为hadoop集群在启动时自动进入安全模式 查看安全模式状态&#xff1a;hadoop fs –safemode get 进入安全模式状态&#xff1a;hadoop fs –safemode enter 退出安全模式状态&#xff1a;hadoop fs –safemode leave转载于:https://www.cnblogs.com/lishengnan/p/a123.ht…

OpenStack nova-network 支持多vlan技术实现片段代码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748

Rest API

什么是接口测试 接口测试又称 API 测试 Application Programming Interface 接口测试是测试系统组件间接口的一种测试。重点关注数据传递。 接口测试一般会用于多系统间交互开发&#xff0c;或者拥有多个子系统的应用系统开发的测试。 为什么要做接口测试 很多系统关联都是基于…

php循环checkbox,php循环删除checkbox | 学步园

一、首先要了解sql语句$SQLdelete from user where id in (1,2,4);表单大概是&#xff1a;form action methodpost input nameID_Dele[] typecheckbox idID_Dele[] value1input nameID_Dele[] typecheckbox idID_Dele[] value2input nameID_Dele[] type首先要了解sql语句$SQL&q…

leetcode1451. 重新排列句子中的单词(排序)

「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text : 句子的首字母大写 text 中的每个单词都用单个空格分隔。 请你重新排列 text 中的单词&#xff0c;使所有单词按其长度的升序排列。如果两个单词的长度相同&#xff0c;则保留其在原句子中的相对顺序…

Java+Oracle实现事务——JDBC事务

J2EE支持JDBC事务、JTA事务和容器事务事务&#xff0c;这里说一下怎样实现JDBC事务。 JDBC事务是由Connection对象所控制的&#xff0c;它提供了两种事务模式&#xff1a;自己主动提交和手动提交&#xff0c;默认是自己主动提交。 自己主动提交就是&#xff1a;在JDBC中。在一个…

开源项目贡献者_我如何从一名贡献者转变为一个开源项目维护者

开源项目贡献者by Dhanraj Acharya通过Dhanraj Acharya 我如何从一名贡献者转变为一个开源项目维护者 (How I went from being a contributor to an Open Source project maintainer) I was a lone software developer. When I was in college, I attended the KDE conference…

网络摄像头CVE

CVE-2018-9995 rtsp未授权访问 rtsp后缀整理&#xff1a; Axis&#xff08;安讯士&#xff09; rtsp:// 192.168.200.202/axis-media/media.amp?videocodech264&resolution1280x720 rtsp://IP地址/mpeg4/media.amp rtsp://IP地址/安迅士/AXIS-media/media.amp123D-Link …

Centos中不从skel目录里向其中复制任何文件错误的解决方法

[rootlocalhost www]# useradd -d /webserver/www/ ithovcom useradd&#xff1a;警告&#xff1a;此主目录已经存在。 不从 skel 目录里向其中复制任何文件。 [rootlocalhost www]# ls -a .&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; .. 发现没…

leetcode91. 解码方法

一条包含字母 A-Z 的消息通过以下方式进行了编码&#xff1a; ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 给定一个只包含数字的非空字符串&#xff0c;请计算解码方法的总数。 示例 1: 输入: “12” 输出: 2 解释: 它可以解码为 “AB”&#xff08;1 2&#xff09;或者…