Django Views(视图函数)

http请求中产生两个核心对象:

        http请求:HttpRequest对象

        http响应:HttpResponse对象

所在位置:django.http

之前我们用到的参数request就是HttpRequest    检测方法:isinstance(request,HttpRequest)

1 HttpRequest对象的属性和方法:

# 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 Type
#             content:       上传文件的原始内容
#
#
# 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支持时该属性才可用。#方法
get_full_path(),   比如:http://127.0.0.1:8000/index33/?name=123 ,req.get_full_path()得到的结果就是/index33/?name=123
req.path:/index33

 

注意一个常用方法:request.POST.getlist('')

2 HttpResponse对象:

  对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。

  HttpResponse类在django.http.HttpResponse

  在HttpResponse对象上扩展的常用方法:

页面渲染:         render()(推荐)<br>                 render_to_response(),页面跳转:         redirect("路径")locals():    可以直接将函数中所有的变量传给模板

 补充:

-----------------------------------url.pyurl(r"login",   views.login),url(r"yuan_back",   views.yuan_back),-----------------------------------views.py
def login(req):if req.method=="POST":if 1:# return redirect("/yuan_back/")name="yuanhao"return render(req,"my backend.html",locals())return render(req,"login.html",locals())def yuan_back(req):name="苑昊"return render(req,"my backend.html",locals())-----------------------------------login.html<form action="/login/" method="post"><p>姓名<input type="text" name="username"></p><p>性别<input type="text" name="sex"></p><p>邮箱<input type="text" name="email"></p><p><input type="submit" value="submit"></p>
</form>
-----------------------------------my backend.html
<h1>用户{{ name }}你好</h1>#总结: render和redirect的区别:
#   1 if render的页面需要模板语言渲染,需要的将数据库的数据加载到html,那么所有的这一部分
#     除了写在yuan_back的视图函数中,必须还要写在login中,代码重复,没有解耦.#   2 the most important: url没有跳转到/yuan_back/,而是还在/login/,所以当刷新后
#     又得重新登录.

七 Template基础 

模板系统的介绍

你可能已经注意到我们在例子视图中返回文本的方式有点特别。 也就是说,HTML被直接硬编码在 Python代码之中。

def current_datetime(request):now = datetime.datetime.now()html = "<html><body>It is now %s.</body></html>" % nowreturn HttpResponse(html)

尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意。 让我们来看一下为什么:

  • 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。 站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。

  • Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。 设计者和HTML/CSS的编码人员不应该被要求去编辑Python的代码来完成他们的工作。

  • 程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。

基于这些原因,将页面的设计和Python的代码分离开会更干净简洁更容易维护。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这就是本章要具体讨论的问题。

------------------------------------------------------------------模板语法------------------------------------------------------------------

一模版的组成

组成:HTML代码+逻辑控制代码

二 逻辑控制代码的组成

1  变量(使用双大括号来引用变量):

语法格式:       {{var_name}}

------Template和Context对象

 

>>> python manange.py shell  (进入该django项目的环境)
>>> from django.template import Context, Template
>>> t = Template('My name is {{ name }}.')
>>> c = Context({'name': 'Stephane'})
>>> t.render(c)
'My name is Stephane.'# 同一模板,多个上下文,一旦有了模板对象,你就可以通过它渲染多个context,无论何时我们都可以
# 像这样使用同一模板源渲染多个context,只进行 一次模板创建然后多次调用render()方法渲染会
# 更为高效:
# Low
for name in ('John', 'Julie', 'Pat'):t = Template('Hello, {{ name }}')print t.render(Context({'name': name}))# Good
t = Template('Hello, {{ name }}')
for name in ('John', 'Julie', 'Pat'):print t.render(Context({'name': name}))

 

 Django 模板解析非常快捷。 大部分的解析工作都是在后台通过对简短正则表达式一次性调用来完成。 这和基于 XML 的模板引擎形成鲜明对比,那些引擎承担了 XML 解析器的开销,且往往比 Django 模板渲染引擎要慢上几个数量级。

from django.shortcuts import render,HttpResponse
from django.template.loader import get_template #记得导入
# Create your views here.import datetime
from django.template import Template,Context# def current_time(req):#原始的视图函数# now=datetime.datetime.now()# html="<html><body>现在时刻:<h1>%s.</h1></body></html>" %now# return HttpResponse(html)# def current_time(req):#django模板修改的视图函数
#     now=datetime.datetime.now()
#     t=Template('<html><body>现在时刻是:<h1 style="color:red">{{current_date}}</h1></body></html>')#t=get_template('current_datetime.html')
#     c=Context({'current_date':now})
#     html=t.render(c)
#     return HttpResponse(html)#另一种写法(推荐)def current_time(req):now=datetime.datetime.now()return render(req, 'current_datetime.html', {'current_date':now})推荐方式

-----深度变量的查找(万能的句点号)

在到目前为止的例子中,我们通过 context 传递的简单参数值主要是字符串,然而,模板系统能够非常简洁地处理更加复杂的数据结构,例如list、dictionary和自定义的对象。

在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)。

#最好是用几个例子来说明一下。
# 首先,句点可用于访问列表索引,例如:>>> from django.template import Template, Context
>>> t = Template('Item 2 is {{ items.2 }}.')
>>> c = Context({'items': ['apples', 'bananas', 'carrots']})
>>> t.render(c)
'Item 2 is carrots.'#假设你要向模板传递一个 Python 字典。 要通过字典键访问该字典的值,可使用一个句点:
>>> from django.template import Template, Context
>>> person = {'name': 'Sally', 'age': '43'}
>>> t = Template('{{ person.name }} is {{ person.age }} years old.')
>>> c = Context({'person': person})
>>> t.render(c)
'Sally is 43 years old.'#同样,也可以通过句点来访问对象的属性。 比方说, Python 的 datetime.date 对象有
#year 、 month 和 day 几个属性,你同样可以在模板中使用句点来访问这些属性:>>> from django.template import Template, Context
>>> import datetime
>>> d = datetime.date(1993, 5, 2)
>>> d.year
>>> d.month
>>> d.day
>>> t = Template('The month is {{ date.month }} and the year is {{ date.year }}.')
>>> c = Context({'date': d})
>>> t.render(c)
'The month is 5 and the year is 1993.'# 这个例子使用了一个自定义的类,演示了通过实例变量加一点(dots)来访问它的属性,这个方法适
# 用于任意的对象。
>>> from django.template import Template, Context
>>> class Person(object):
...     def __init__(self, first_name, last_name):
...         self.first_name, self.last_name = first_name, last_name
>>> t = Template('Hello, {{ person.first_name }} {{ person.last_name }}.')
>>> c = Context({'person': Person('John', 'Smith')})
>>> t.render(c)
'Hello, John Smith.'# 点语法也可以用来引用对象的方法。 例如,每个 Python 字符串都有 upper() 和 isdigit()
# 方法,你在模板中可以使用同样的句点语法来调用它们:
>>> from django.template import Template, Context
>>> t = Template('{{ var }} -- {{ var.upper }} -- {{ var.isdigit }}')
>>> t.render(Context({'var': 'hello'}))
'hello -- HELLO -- False'
>>> t.render(Context({'var': '123'}))
'123 -- 123 -- True'# 注意这里调用方法时并* 没有* 使用圆括号 而且也无法给该方法传递参数;你只能调用不需参数的
# 方法。

-----变量的过滤器(filter)的使用

语法格式:      {{obj|filter:param}}
# 1  add          :   给变量加上相应的值## 2  addslashes   :    给变量中的引号前加上斜线## 3  capfirst     :    首字母大写## 4  cut          :   从字符串中移除指定的字符## 5  date         :   格式化日期字符串## 6  default      :   如果值是False,就替换成设置的默认值,否则就是用本来的值## 7  default_if_none:  如果值是None,就替换成设置的默认值,否则就使用本来的值#实例:#value1="aBcDe"
{{ value1|upper }}<br>#value2=5
{{ value2|add:3 }}<br>#value3='he  llo wo r ld'
{{ value3|cut:' ' }}<br>#import datetime
#value4=datetime.datetime.now()
{{ value4|date:'Y-m-d' }}<br>#value5=[]
{{ value5|default:'空的' }}<br>#value6='<a href="#">跳转</a>'{{ value6 }}{% autoescape off %}{{ value6 }}
{% endautoescape %}{{ value6|safe }}<br>{{ value6|striptags }}#value7='1234'
{{ value7|filesizeformat }}<br>
{{ value7|first }}<br>
{{ value7|length }}<br>
{{ value7|slice:":-1" }}<br>#value8='http://www.baidu.com/?a=1&b=3'
{{ value8|urlencode }}<br>value9='hello I am yuan'

2 标签(tag)的使用(使用大括号和百分比的组合来表示使用tag)

{% tags %}

------{% if %} 的使用 

{% if %}标签计算一个变量值,如果是“true”,即它存在、不为空并且不是false的boolean值,系统则会显示{% if %}和{% endif %}间的所有内容

{% if num >= 100 and 8 %}{% if num > 200 %}<p>num大于200</p>{% else %}<p>num大于100小于200</p>{% endif %}{% elif num < 100%}<p>num小于100</p>{% else %}<p>num等于100</p>{% endif %}{% if %} 标签接受and,or或者not来测试多个变量值或者否定一个给定的变量
{% if %} 标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义,例如下面的标签是不合法的:{% if obj1 and obj2 or obj3 %}

------{% for %}的使用

{% for %}标签允许你按顺序遍历一个序列中的各个元素,每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容

<ul>
{% for obj in list %}<li>{{ obj.name }}</li>
{% endfor %}
</ul>#在标签里添加reversed来反序循环列表:{% for obj in list reversed %}...{% endfor %}#{% for %}标签可以嵌套:{% for country in countries %}<h1>{{ country.name }}</h1><ul>{% for city in country.city_list %}<li>{{ city }}</li>{% endfor %}</ul>{% endfor %}#系统不支持中断循环,系统也不支持continue语句,{% for %}标签内置了一个forloop模板变量,
#这个变量含有一些属性可以提供给你一些关于循环的信息1,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1:{% for item in todo_list %}<p>{{ forloop.counter }}: {{ item }}</p>{% endfor %}
2,forloop.counter0 类似于forloop.counter,但它是从0开始计数,第一次循环设为0
3,forloop.revcounter
4,forloop.revcounter0
5,forloop.first当第一次循环时值为True,在特别情况下很有用:{% for object in objects %}   {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}   {{ object }}   </li>  {% endfor %}  # 富有魔力的forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了
# 如果你的模板context已经包含一个叫forloop的变量,Django会用{% for %}标签替代它
# Django会在for标签的块中覆盖你定义的forloop变量的值
# 在其他非循环的地方,你的forloop变量仍然可用#{% empty %}{{li }}{%  for i in li %}<li>{{ forloop.counter0 }}----{{ i }}</li>{% empty %}<li>this is empty!</li>{% endfor %}#         [11, 22, 33, 44, 55]
#            0----11
#            1----22
#            2----33
#            3----44
#            4----55

------{%csrf_token%}:csrf_token标签

     用于生成csrf_token的标签,用于防治跨站攻击验证。注意如果你在view的index里用的是render_to_response方法,不会生效

     其实,这里是会生成一个input标签,和其他表单标签一起提交给后台的。

------{% url %}:  引用路由配置的地址

 

<form action="{% url "bieming"%}" ><input type="text"><input type="submit"value="提交">{%csrf_token%}
</form>

 

------{% with %}:用更简单的变量名替代复杂的变量名

 

{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}

 

------{% verbatim %}: 禁止render

 

{% verbatim %}{{ hello }}{% endverbatim %}

 

-----{% load %}: 加载标签库

3 自定义filter和simple_tag

------a、在app中创建templatetags模块(必须的)

------b、创建任意 .py 文件,如:my_tags.py

 

from django import template
from django.utils.safestring import mark_saferegister = template.Library()   #register的名字是固定的,不可改变@register.filter
def filter_multi(v1,v2):return  v1 * v2@register.simple_tag
def simple_tag_multi(v1,v2):return  v1 * v2@register.simple_tag
def my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg,)return mark_safe(result)

 

------c、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py :{% load my_tags %}

------d、使用simple_tag和filter(如何调用)

 

-------------------------------.html
{% load xxx %}   #首行# num=12
{{ num|filter_multi:2 }} #24{{ num|filter_multi:"[22,333,4444]" }}{% simple_tag_multi 2 5 %}  参数不限,但不能放在if for语句中
{% simple_tag_multi num 5 %}

 

-----e、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.

注意:

filter可以用在if等语句后,simple_tag不可以

{% if num|filter_multi:30 > 100 %}{{ num|filter_multi:30 }}
{% endif %}

4 extend模板继承

------include 模板标签

在讲解了模板加载机制之后,我们再介绍一个利用该机制的内建模板标签: {% include %} 。该标签允许在(模板中)包含其它的模板的内容。 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复。

------extend(继承)模板标签

到目前为止,我们的模板范例都只是些零星的 HTML 片段,但在实际应用中,你将用 Django 模板系统来创建整个 HTML 页面。 这就带来一个常见的 Web 开发问题: 在整个网站中,如何减少共用页面区域(比如站点导航)所引起的重复和冗余代码?

解决该问题的传统做法是使用 服务器端的 includes ,你可以在 HTML 页面中使用该指令将一个网页嵌入到另一个中。 事实上, Django 通过刚才讲述的 {% include %} 支持了这种方法。 但是用 Django 解决此类问题的首选方法是使用更加优雅的策略—— 模板继承 。

本质上来说,模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载。

让我们通过修改 current_datetime.html 文件,为 current_datetime 创建一个更加完整的模板来体会一下这种做法:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head><title>The current time</title>
</head>
<body><h1>My helpful timestamp site</h1><p>It is now {{ current_date }}.</p><hr><p>Thanks for visiting my site.</p>
</body>
</html>

这看起来很棒,但如果我们要为 hours_ahead 视图创建另一个模板会发生什么事情呢?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head><title>Future time</title>
</head>
<body><h1>My helpful timestamp site</h1><p>In {{ hour_offset }} hour(s), it will be {{ next_time }}.</p><hr><p>Thanks for visiting my site.</p>
</body>
</html>

很明显,我们刚才重复了大量的 HTML 代码。 想象一下,如果有一个更典型的网站,它有导航条、样式表,可能还有一些 JavaScript 代码,事情必将以向每个模板填充各种冗余的 HTML 而告终。

解决这个问题的服务器端 include 方案是找出两个模板中的共同部分,将其保存为不同的模板片段,然后在每个模板中进行 include。 也许你会把模板头部的一些代码保存为 header.html 文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>

你可能会把底部保存到文件 footer.html :

<hr><p>Thanks for visiting my site.</p>
</body>
</html>

对基于 include 的策略,头部和底部的包含很简单。 麻烦的是中间部分。 在此范例中,每个页面都有一个<h1>My helpful timestamp site</h1> 标题,但是这个标题不能放在 header.html 中,因为每个页面的 <title> 是不同的。 如果我们将 <h1> 包含在头部,我们就不得不包含 <title> ,但这样又不允许在每个页面对它进行定制。 何去何从呢?

Django 的模板继承系统解决了这些问题。 你可以将其视为服务器端 include 的逆向思维版本。 你可以对那些不同 的代码段进行定义,而不是 共同 代码段。

第一步是定义 基础模板,该框架之后将由子模板所继承。 以下是我们目前所讲述范例的基础模板:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head><title>{% block title %}{% endblock %}</title>
</head>
<body><h1>My helpful timestamp site</h1>{% block content %}{% endblock %}{% block footer %}<hr><p>Thanks for visiting my site.</p>{% endblock %}
</body>
</html>

这个叫做 base.html 的模板定义了一个简单的 HTML 框架文档,我们将在本站点的所有页面中使用。 子模板的作用就是重载、添加或保留那些块的内容。 (如果你一直按顺序学习到这里,保存这个文件到你的template目录下,命名为 base.html .)

我们使用模板标签: {% block %} 。 所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。 每个{% block %}标签所要做的是告诉模板引擎,该模板下的这一块内容将有可能被子模板覆盖。

现在我们已经有了一个基本模板,我们可以修改 current_datetime.html 模板来 使用它:

{% extends "base.html" %}{% block title %}The current time{% endblock %}{% block content %}
<p>It is now {{ current_date }}.</p>
{% endblock %}

再为 hours_ahead 视图创建一个模板,看起来是这样的:

{% extends "base.html" %}{% block title %}Future time{% endblock %}{% block content %}
<p>In {{ hour_offset }} hour(s), it will be {{ next_time }}.</p>
{% endblock %}

看起来很漂亮是不是? 每个模板只包含对自己而言 独一无二 的代码。 无需多余的部分。 如果想进行站点级的设计修改,仅需修改 base.html ,所有其它模板会立即反映出所作修改。

      以下是其工作方式:

      在加载 current_datetime.html 模板时,模板引擎发现了 {% extends %} 标签, 注意到该模板是一个子模板。 模板引擎立即装载其父模板,即本例中的 base.html 。此时,模板引擎注意到 base.html 中的三个 {% block %} 标签,并用子模板的内容替换这些 block 。因此,引擎将会使用我们在 block title %} 中定义的标题,对 {% block content %} 也是如此。 所以,网页标题一块将由{% block title %}替换,同样地,网页的内容一块将由 {% block content %}替换。

     注意由于子模板并没有定义 footer 块,模板系统将使用在父模板中定义的值。 父模板 {% block %} 标签中的内容总是被当作一条退路。继承并不会影响到模板的上下文。 换句话说,任何处在继承树上的模板都可以访问到你传到模板中的每一个模板变量。你可以根据需要使用任意多的继承次数。 使用继承的一种常见方式是下面的三层法:

 <1> 创建 base.html 模板,在其中定义站点的主要外观感受。 这些都是不常修改甚至从不修改的部分。<2> 为网站的每个区域创建 base_SECTION.html 模板(例如, base_photos.html 和 base_forum.html )。这些模板对base.html 进行拓展,并包含区域特定的风格与设计。<3> 为每种类型的页面创建独立的模板,例如论坛页面或者图片库。 这些模板拓展相应的区域模板。

 这个方法可最大限度地重用代码,并使得向公共区域(如区域级的导航)添加内容成为一件轻松的工作。

以下是使用模板继承的一些诀窍:

<1>如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。<2>一般来说,基础模板中的 {% block %} 标签越多越好。 记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。 俗话说,钩子越多越好。<3>如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。如果你需要访问父模板中的块的内容,使用 {{ block.super }}这个标签吧,这一个魔法变量将会表现出父模板中的内容。 如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。<4>不允许在同一个模板中定义多个同名的 {% block %} 。 存在这样的限制是因为block 标签的工作方式是双向的。也就是说,block 标签不仅挖了一个要填的坑,也定义了在父模板中这个坑所填充的内容。如果模板中出现了两个相同名称的 {% block %} 标签,父模板将无从得知要使用哪个块的内容。

 

转载于:https://www.cnblogs.com/huangjinshan/p/6479929.html

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

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

相关文章

massCode 一款优秀的开源代码片段管理器

本文将介绍一款适合程序员使用的个人代码片段管理工具 massCode[1]。massCode小时候&#xff0c;也许我们每个人都会被老师要求有一个到处摘录优美句子段落的作文素材本 —— 采蜜集。不可否认&#xff0c;这对我们的写作水平的提高确实有很大的帮助。对开发人员来说当然也需要…

【ArcGIS Pro微课1000例】0021:Win10系统ArcGIS Pro3.0.1安装教程(附ArcGIS Pro下载)

本文讲解Win10系统上ArcGIS Pro3.0.1安装教程,附软件包下载。 文章目录 一、 软件安装步骤1. 安装.net Runtime 62. 安装ArcGIS Pro3. 安装中文语言4. 删除代理二、软件下载地址一、 软件安装步骤 [软件名称]: ArcGIS Pro 3.0.1 [软件大小]:4.33GB [安装环境]: Win 11/Win …

iOS逆向工程——非越狱调试

其实iOS的逆向分析业界已经十分成熟了&#xff0c;网上也有许多有趣的尝试(一步一步实现iOS微信自动抢红包(非越狱)。本文着重于如何在非越狱机器上进行调试&#xff0c;出于学习及总结的目的&#xff0c;记录于此。 本文以破解游戏梦幻西游为例&#xff0c;逐步讲解整个调试流…

[转]2022 Flutter 宣布发布 Windows 正式版

原文链接&#xff1a; https://medium.com/flutter/announcing-flutter-for-windows-6979d0d01fed 自从推出 Flutter 以来&#xff0c;我们一直专注于为漂亮的定制应用提供跨平台解决方案&#xff0c;这些应用被编译为机器代码并充分利用设备的底层图形硬件功能。 今天这一愿景…

电脑经常弹出“不支持的硬件”解决办法

电脑经常弹出“不支持的硬件”解决办法。 通过微软官方查证,这是由于以上处理器需要最新的Windows10系统才会这样子的,而大多出现该提示的都安装了Win7或是Win8.1系统。 来至微软官方的说明 此错误出现的原因是各代新处理器要求最新Windows版本以获得支持。 例如,Windows 1…

使用 Web API 上传和下载多个文件

原文作者&#xff1a;Jay Krishna Reddy原文链接&#xff1a;https://www.c-sharpcorner.com/article/upload-and-download-multiple-files-using-web-api/翻译&#xff1a;沙漠尽头的狼&#xff08;谷歌翻译加持&#xff0c;文中版本使用.NET 6升级&#xff09;---正文开始---…

【MapGIS精品教程】002:GDB本地数据库的使用

本文主要内容为MapGISGDB本地数据库的使用&#xff0c;包括&#xff1a;GDB企业管理器的认识、GDB本地数据库的创建方法、GDB本地数据库的备份和恢复。 1. GDB企业管理器的认识 GDB是地理数据的资源管理器&#xff0c;主要对空间数据进行有序组织与管理。 GDB数据管理包括&…

RabbitMQ学习3----运行和管理RabbitMQ

1.服务为管理 Erlang天生就是为了让应用程序无需知道对方是否存在同一台机器上即可互相通信。 Erlang节点&#xff1a;Erlang虚拟机的每个实例。多个Erlang应用程序可以运行在同一个节点之上。节点之间可以进行本地通信&#xff08;不管他们是运行在同一台服务器之上&#xff0…

各代移动网络性能

摘自《中国元宇宙白皮书》 下载整书完整版https://www.aliyundrive.com/s/gXQvRLM22kD

EFCore高级Saas系统下单DbContext如何支持不同数据库的迁移

前言随着系统的不断开发和迭代默认的efcore功能十分强大&#xff0c;但是随着Saas系统的引进efcore基于表字段的多租户模式已经非常完美了&#xff0c;但是基于数据库的多租户也是可以用的&#xff0c;但是也存在缺点&#xff0c;缺点就是没有办法支持不同数据库&#xff0c;mi…

51. Python 数据处理(2)

1.Python 修改excel文件import xlrd import xlutils.copy excelr xlrd.open_workbook("hello.xlsx") excelw xlutils.copy.copy(excelr) sheet1 excelw.get_sheet(0) sheet1.write(3, 5, "xlutils.copy test test") excelw.save("hello.xlsx"…

人工智能十大流行算法

导读&#xff1a;本文为有志于成为数据科学家或对此感兴趣的读者们介绍最流行的机器学习算法。 作者&#xff1a;Fahim ul Haq 译者&#xff1a;刘志勇&#xff0c;策划&#xff1a;赵钰莹 来源&#xff1a;InfoQ&#xff08;ID&#xff1a;infoqchina&#xff09; 机器学习是…

Win7+Win10双系统安装全攻略

安装双系统,不仅能给你非凡的体验,还可以满足工作中因系统版本,兼容性,处理器等原因带来的不便。本文讲解Win7+Win10双系统安装全攻略,亲测可用。 1. 硬盘分区 本文讲解利用固态硬盘+机械硬盘的分区方式。 固态硬盘:为了绝对提高系统运行的速度,将固态硬盘作为双系统的…

聊聊研发团队中的“人”

大家好&#xff0c;我是Z哥。汉字博大精深&#xff0c;很多时候我们可以通过拆字来更形象地理解一个词的含义。比如“团队”这个词的两个字"团"和“队”单独看也都是表示一种由多人组成的组织。再做一下拆字就是“口”“才”和“耳”“人”。前者表示一个人才如果没有…

[转]【分布式系统】唯一ID生成策略总结

文章目录 全局唯一id介绍 全局唯一id特点:常见全局唯一id生成策略 1、数据库自增长序列或字段生成id 2、UUID 3、Redis生成ID 4、zookeeper生成ID 5、Twitter的snowflake算法全局唯一id介绍 系统唯一id是我们在设计阶段常常遇到的问题。在复杂的分布式系统中&#…

超全的开源Winform UI库,满足你的一切桌面开发需求!

本文有dotnet9站长整理 网址&#xff1a;https://dotnet9.com/本站曾介绍过一款Winform开源控件库HZHControls&#xff0c;Winform在大家心中的地位还是挺高的&#xff0c;今天小编再分享一款新鲜出炉的 Winform UI库——SunnyUI&#xff0c;一起跟 Dotnet9 往下看吧。项目名称…

告别国外 IDE,阿里 蚂蚁自研 IDE 研发框架 OpenSumi 正式开源

经历近 3 年时间&#xff0c;在阿里集团及蚂蚁集团共建小组的努力下&#xff0c;OpenSumi 作为国内首个强定制性、高性能&#xff0c;兼容 VS Code 插件体系的 IDE 研发框架&#xff0c;今天正式对外开源。 一 OpenSumi 是什么&#xff1f; OpenSumi 是一款面向垂直领域&#…

window-memcache技术随笔

memcached.exe软件放置到非中文,非空格的目录,把MSVCR71.DLL文件放在memcached.exe同目录下启动,控制面板中打开window功能-Telnet客户端memcache服务方法一:管理员身份打开黑窗口 d:(mem的所在盘)cd memmemcached.exe -p 11211方法二: 安装为Windows的系统服务memcached.exe -…

将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器

首先&#xff0c;非常感谢赵老大的CodeTimer&#xff0c;它让我们更好的了解到代码执行的性能&#xff0c;从而可以让我们从性能的角度来考虑问题&#xff0c;有些东西可能我们认为是这样的&#xff0c;但经理测试并非如何&#xff0c;这正应了我之前的那名话&#xff1a;“机器…

聊聊 C++ 中的几种智能指针(下)

一&#xff1a;背景 上一篇我们聊到了C 的 auto_ptr &#xff0c;有朋友说已经在 C 17 中被弃用了&#xff0c;感谢朋友提醒&#xff0c;今天我们来聊一下 C 11 中引入的几个智能指针。unique_ptrshared_ptrweak_ptr看看它们都怎么玩。二&#xff1a;三大智能指针详解 1. uniq…