Django框架04 /模板相关、别名/反向解析/路由分发

1. 语法

  • 关于模板渲染需要记两种特殊符号(语法):

    1. {{ }}
    2. # 变量相关的用{{}}
    3. {% %}
    4. # 逻辑相关的用{ % % }。

2. 变量/万能的点

  • 代码示例

    视图:test.py

    1. def index(request):
    2. import datetime
    3. s = "hello"
    4. l = [111, 222, 333] # 列表
    5. dic = {"name": "张三", "age": 18} # 字典
    6. date = datetime.date(1993, 5, 2) # 日期对象
    7. class Person(object):
    8. def __init__(self, name):
    9. self.name = name
    10. def dream(self):
    11. return 'dreamer'
    12. person_san = Person("张三") # 自定义类对象
    13. person_si = Person("李四")
    14. person_wu = Person("王五")
    15. person_list = [person_san, person_si, person_wu]
    16. # 方式1:
    17. return render(request, "index.html", {"l": l, "dic": dic, "date": date, "person_list": person_list})
    18. # 方式2:
    19. return render(request,'index.html',locals())
    20. # locals()获取函数内容所有的变量,然后通过render方法给了index.html文件进行模板渲染
    21. # 如果图省事,可以用它,但是很多多余的变量也被传进去了,效率低

    模板:test.html

    1. <h4>{{s}}</h4>
    2. <h4>列表:{{ l.0 }}</h4>
    3. <h4>列表:{{ l.2 }}</h4>
    4. <h4>字典:{{ dic.name }}</h4>
    5. <h4>字典:{{ dic.keys }}</h4>
    6. <h4>字典:{{ dic.values }}</h4>
    7. <h4>字典:{{ dic.items }}</h4>
    8. <h4>日期:{{ date.year }}</h4>
    9. <!--取列表的第1个对象的name属性的值-->
    10. <h4>类对象列表:{{ person_list.0.name }}</h4>
    11. <!--取列表的第1个对象的dream方法的返回值,如果没有返回值,拿到的是none-->
    12. <h4>类对象列表:{{ person_list.0.dream }}</h4>

    注意:

    调用对象里面的方法的时候,不需要写括号来执行,并且只能执行不需要传参数的方法,如果你的这个方法需要传参数,那么模板语言不支持,不能帮你渲染

  • 总结:

    1. 在Django的模板语言中按此语法使用:{{ 变量名 }}

    2. 当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身。

      变量的命名包括任何字母数字以及下划线 ("_")的组合。

      变量名称中不能有空格或标点符号。

    3. 深度查询据点符(.)在模板语言中有特殊的含义。当模版系统遇到点("."),它将以这样的顺序查询:

      • 字典查询(Dictionary lookup)
      • 属性或方法查询(Attribute or method lookup)
      • 数字索引查询(Numeric index lookup)
    4. 如果计算结果的值是可调用的,它将被无参数的调用。 调用的结果返回值将成为模版的值。

    5. 如果使用的变量不存在, 模版系统将插入 string_if_invalid 选项的值, 它被默认设置为'' (空字符串)

3 . 过滤器

  • 在Django的模板语言中,通过使用 过滤器 来改变变量的显示

    1. 过滤器的语法:

      1. {{ value|filter_name:参数 }}
    2. 使用管道符"|"来应用过滤器

      1. {{ name|lower }}
      2. # 会将name变量应用lower过滤器之后再显示它的值,lower在这里的作用是将文本全都变成小写。
    3. 注意:

      1. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。

      2. 过滤器可以接受参数,例如:{{ text|truncatewords:30 }},这将显示text的前30个词。

      3. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,

        如:{{ list|join:', ' }}

      4. '|'左右没有空格没有空格没有空格

  • 常用过滤器 /Django的模板语言中提供了大约六十个内置过滤器

    1. default

      如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。

      1. {{ value|default:"nothing"}}
      2. # 如果value没有传值或者值为空的话就显示nothing
    2. length

      返回值的长度,作用于字符串和列表。

      1. {{ value|length }}
      2. # 返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.
    3. filesizeformat

      将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。

      1. {{ value|filesizeformat }}
      2. # 如果 value 是 123456789,输出将会是 117.7 MB。
    4. slice 切片

      1. value="hello world",
      2. {{value|slice:"2:-1"}}
      3. # 还有其他可切片的数据类型
    5. date 格式化

      1. value=datetime.datetime.now()
      2. {{ value|date:"Y-m-d H:i:s"}}
      3. # 关于时间日期的可用的参数(除了Y,m,d等等)还有很多
    6. safe 不进行转义

      为了安全,Django的模板中在进行模板渲染的时候会对HTML标签和JS等语法标签进行自动转义

      通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义

      1. value = "<a href='#'>点我</a>"value="<script>alert('123')</script>"
      2. {{ value|safe}}
      3. # 这样a标签不会被转义,正常显示a标签
    7. truncatechars

      如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

      1. # 参数:截断的字符数
      2. {{ value|truncatechars:9}}
      3. # 注意:最后那三个省略号也是9个字符里面的,也就是这个9截断出来的是6个字符+3个省略号,
      4. # 如果想要展开,配合前端的点击事件就可以
    8. truncatewords

      在一定数量的字后截断字符串,是截多少个单词。(是通过空格区分不同的字符串)

      1. value = hello girl hi baby yue ma’,
      2. {{ value|truncatewords:3}}
      3. # 上面例子得到的结果是 'hello girl h1...'
    9. cut

      移除value中所有的与给出的变量相同的字符串

      1. {{ value|cut:' ' }}
      2. # 切掉空格,如果value为'i love you',那么将输出'iloveyou'.
    10. join

      使用字符串连接列表,就像Python的str.join(list)(有空格的话,也要将空格包含在引号的里边)

      1. {{ list|join:', ' }}
      2. # 列表拼接成字符串

4. 标签Tags

  • 标签简述:

    • 标签看起来像是这样的: {% tag %}。标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中。
    • 一些标签需要开始和结束标签 (例如{% tag %} ...标签 内容 ... {% endtag %})。
  • for标签

    • 遍历每一个元素:

      写个for,然后 tab键自动生成for循环的结构,循环很基础,就这么简单的用,没有什么break之类的,复杂一些的功能,要通过js

      1. {% for person in person_list %}
      2. <p>{{ person.name }}</p> <!--凡是变量都要用两个大括号括起来-->
      3. {% endfor %}
      4. 可以利用{% for obj in list reversed %}反向完成循环。
    • 遍历一个字典:

      1. {% for key,val in dic.items %}
      2. <p>{{ key }}:{{ val }}</p>
      3. {% endfor %}
    • for ... empty

      for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。

      1. {% for person in person_list %}
      2. <p>{{ person.name }}</p>
      3. {% empty %}
      4. <p>sorry,no person here</p>
      5. {% endfor %}
    • forloop

      1. {% for i in data %}
      2. xx
      3. {{ forloop.counter }}
      4. {% empty %}
      5. xx
      6. {% endfor %}
      7. forloop.counter <!--当前循环的索引值(从1开始),forloop是循环器,通过点来使用功能-->
      8. forloop.counter0 <!--当前循环的索引值(从0开始)-->
      9. forloop.revcounter <!--当前循环的倒序索引值(最后一个位置是1)-->
      10. forloop.revcounter0 <!--当前循环的倒序索引值(最后一个位置是0)-->
      11. forloop.first <!--当前循环是不是第一次循环(布尔值)-->
      12. forloop.last <!--当前循环是不是最后一次循环(布尔值)-->
      13. forloop.parentloop <!--本层循环的外层循环的对象,再通过上面的几个属性来显示外层循环的计数等-->
  • if标签

    • if

      1. {% if %}
      2. <!--会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。-->
      3. <!--if语句支持 and or、==、>、<、!=、<=、>=、innot inisis not判断,注意条件两边都有空格。-->
    • if else

      1. {% if user_list|length > 5 %} <!--结合过滤器来使用-->
      2. 七座豪华SUV
      3. {% else %}
      4. 黄包车
      5. {% endif %}
    • if elif else

      1. {% if num > 100 or num < 0 %}
      2. <p>无效</p> <!--不满足条件,不会生成这个标签-->
      3. {% elif num > 80 and num < 100 %}
      4. <p>优秀</p>
      5. {% else %} <!--也是在if标签结构里面的-->
      6. <p>凑活吧</p>
      7. {% endif %}
  • with

    • 相当于起别名,使用一个简单地名字缓存一个复杂的变量,多用于给一个复杂的变量起别名,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的

      1. {% with total=business.employees.count %}
      2. {{ total }} <!--只能在with语句体内用-->
      3. {% endwith %}

      4. {% with business.employees.count as total %}
      5. {{ total }}
      6. {% endwith %}
      7. <!--注意等号左右不要加空格-->

5. 模板继承/母版继承

  • 模板继承流程

    1. 创建一个xx.html页面(作为母版,其他页面来继承它使用)

    2. 在母版中定义block块(可以定义多个,整个页面任意位置)

      1. <!-- 预留的钩子,共其他需要继承它的html,自定义自己的内容 -->
      2. {% block content %}
      3. {% endblock %}
    3. 其他页面继承写法

      1. <!-- 必须放在页面开头 -->
      2. {% extends 'base.html' %} 必须放在页面开头
    4. 页面中写和母版中名字相同的block块,从而来显示自定义的内容

      1. {% block content %} <!-- 预留的钩子,共其他需要继承它的html,自定义自己的内容 -->
      2. {{ block.super }} <!-- 这是显示继承的母版中的content这个块中的内容 -->
      3. 这是子板
      4. {% endblock %}
    5. 注意:

      • 三个钩子/css钩子/body钩子/js钩子
      • extends 标签是这里的关键。它告诉模版引擎,这个模版“继承”了另一个模版
      • 如果使用 {% extends %} 标签,它必须是模版中的第一个标签。否则模版继承都将无法工作,模板渲染的时候django都不知道你在干啥
      • 为了更好的可读性,你也可以给你的 {% endblock %} 标签一个 名字 。例如:

        {% block content %}

        ...

        {% endblock content %}  

          在大型模版中,这个方法帮你清楚的看到哪一个{% block %} 标签被关闭了。
      • 不能在一个模版中定义多个相同名字的 block 标签
  • 代码示例:

    • base.html --- 模板/母板

      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <title>base</title>
      6. <style>
      7. body{
      8. margin:0;
      9. }
      10. h1{
      11. margin:0;
      12. background-color:tomato;
      13. height: 50px;
      14. text-align:center;
      15. }
      16. .d1{
      17. margin-top:0;
      18. background-color:darkcyan;
      19. height:120px;
      20. width:20%;
      21. float:left;
      22. }
      23. .d2{
      24. margin-top:0;
      25. background-color:yellow;
      26. height:120px;
      27. width:80%;
      28. float:right;
      29. text-align:center;
      30. line-height:120px;
      31. }
      32. </style>
      33. </head>
      34. <body>
      35. <div>
      36. <h1>头条</h1>
      37. </div>
      38. <div class="d">
      39. <div class="d1">
      40. <ul>
      41. <a href="/menu1/"><li>菜单1</li></a>
      42. <a href="/menu2/"><li>菜单2</li></a>
      43. <a href="/menu3/"><li>菜单3</li></a>
      44. </ul>
      45. </div>
      46. <div class="d2">
      47. {% block content %}
      48. 模板
      49. {% endblock %}
      50. </div>
      51. </div>
      52. </body>
      53. </html>
    • home.html --- 主页

      1. <!-- 继承 -->
      2. {% extends 'base.html'%}
      3. {% block content %}#}
      4. 主页
      5. {% endblock %}
    • menu.html --- 菜单页

      1. {% extends 'base.html'%}
      2. {% block content %}
      3. 菜单一
      4. {% endblock %}
    • 既用到母板内容,又要新增内容

      1. {% extends 'base.html'%}
      2. {% block content %}
      3. {{ block.super }}
      4. 菜单二
      5. {% endblock %}

6. 组件

  • 组件用法

    1. 创建html页面,里面写上自己封装的组件内容,xx.html

    2. 新的html页面使用这个组件

      1. {% include 'xx.html' %}
  • 组件与插件的区别

    1. 组件是提供某一完整功能的模块,如:编辑器组件,QQ空间提供的关注组件 等。
    2. 而插件更倾向封闭某一功能方法的函数。
    3. 这两者的区别在 Javascript 里区别很小,组件这个名词用得不多,一般统称插件。
  • 代码示例:

    • template.html

      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <title>template</title>
      6. <style>
      7. div{
      8. background-color:tomato;
      9. height:40px;
      10. }
      11. </style>
      12. </head>
      13. <body>
      14. <div>
      15. <span>首页</span>
      16. <span>手机</span>
      17. <span>家居生活</span>
      18. <span>户外</span>
      19. <span>户内</span>
      20. </div>
      21. </body>
      22. </html>
    • home.html

      1. {% include 'template.html' %}

7. 自定义标签和过滤器

  • 自定义标签和过滤器用法

    1. 在应用下创建一个叫做templatetags的文件夹(名称不能改),在里面创建一个py文件,例如myfilter.py

    2. 在xx.py文件中引用django提供的template类,写法

      1. from django import template
      2. register = template.Library() #register变量名称不能改
      3. # 定义过滤器 参数至多两个
      4. @register.filter
      5. def xx(v1,v2):
      6. return xxx
      7. # 使用:
      8. {% load xx %}
      9. {{ name|xx:'oo' }}
      10. # 自定义标签 没有参数个数限制
      11. @register.simple_tag
      12. def huxtag(n1,n2):
      13. '''
      14. :param n1: 变量的值 管道前面的
      15. :param n2: 传的参数 管道后面的,如果不需要传参,就不要添加这个参数
      16. :return:
      17. '''
      18. return n1+n2
      19. # inclusion_tag 返回html片段的标签
      20. @register.inclusion_tag('result.html')
      21. def res(n1):
      22. return {'li':n1 }
      23. # 使用:
      24. {% res a %}
  • 代码示例

    • filters.py

      1. from django import template
      2. register = template.Library() #register的名字是固定的,不可改变
      3. # 自定义过滤器
      4. @register.filter
      5. def filt(n1):
      6. return n1+'heihei'
      7. # 自定义标签
      8. @register.simple_tag
      9. def tags(n1,n2):
      10. return n1+n2
    • test.html

      1. <!-- 自定义过滤器 -->
      2. {% load filters %}
      3. {{ name|filt }}
      4. <!-- 自定义标签 -->
      5. {% load filters %}
      6. {% tags name '888' %}
  • inclusion_tag应用示例

    • view.py

      1. def home(request):
      2. return render(request,'home.html',{'name':['aa','bb','cc','dd']})
    • filters.py

      1. from django import template
      2. register = template.Library()
      3. @register.inclusion_tag('result.html')
      4. def res(n1):
      5. return {'l1':n1}
      6. # 将result.html里面的内容用函数的返回值渲染,然后作为组件一样,加载到使用这个函数的html文件里面
    • home.html

      1. <!-- 自定义经过加工的标签 -->
      2. {% load filters %}
      3. {% res name %}
    • result.html

      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <title>result</title>
      6. </head>
      7. <body>
      8. <ul>
      9. {% for i in l1 %}
      10. <li>{{ i }}+{{ i }}</li>
      11. {% endfor %}
      12. </ul>
      13. </body>
      14. </html>

8. 静态文件配置

  • 静态文件配置方法

    1. ‘项目目录下’创建一个文件夹,例如名为statics,将所有静态文件放到这个文件夹中

    2. settings配置文件中进行下面的配置

      1. # 静态文件相关配置
      2. STATIC_URL = '/static/' # 静态文件路径别名
      3. STATICFILES_DIRS = [
      4. os.path.join(BASE_DIR, 'statics'),
      5. ]
    3. 应用静态文件的两种方式

      • 方式一:

        1. <link rel="stylesheet" href="/static/css/index.css">
      • 方式二: -- {% static %}

        1. {% load static %}
        2. <script src="{% static "mytest.js" %}"></script>
  • 代码示例

    • home.html

      1. <!DOCTYPE html>
      2. <html lang="zh-cn">
      3. <head>
      4. <meta charset="UTF-8">
      5. <meta name="viewport"
      6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
      8. <title>static_files</title>
      9. <link rel="stylesheet" href="/static/css/one.css">
      10. </head>
      11. <body>
      12. <div>
      13. <span>头条</span>
      14. </div>
      15. </body>
      16. </html>
    • static_files > css > one.css

      1. div{
      2. background-color:tomato;
      3. height:50px;
      4. text-align:center;
      5. line-height:50px;
      6. font-weight:bold;
      7. }
    • settings.py

      1. STATIC_URL = '/static/'
      2. STATICFILES_DIRS =[
      3. os.path.join(BASE_DIR,'static_files')
      4. ]

9. url别名和反向解析

  • 别名写法

    1. url(r'^index2/', views.index,name='index'),
  • 反向解析

    1. # 后端
    2. from django.urls import reverse
    3. reverse('别名') # 例如:reverse('index') -- /index/
    4. # 带参数的:
    5. reverse('别名',args=(1,2)) --/index/1/2
    6. reverse('别名',kwargs={'name':'xx'})
    7. # 前端html
    8. {% url '别名' %} # 例如:{% url 'index' %} -- /index/
    9. # 带参数的:
    10. {% url 'index' xxx %} -- /index/xxx/

10. url命名空间

  • 路由分发 include

    1. 1 在每个app下创建urls.py文件,写上自己app的路径
    2. 2 在项目目录下的urls.py文件中做一下路径分发,看下面内容
    3. from django.conf.urls import url,include
    4. from django.contrib import admin
    5. urlpatterns = [
    6. # url(r'^admin/', admin.site.urls),
    7. url(r'^app01/', include('app01.urls')), # app01/home/
    8. url(r'^app02/', include('app02.urls')),
    9. ]
  • 命名空间namespace

    1. from django.conf.urls import url,include
    2. from django.contrib import admin
    3. urlpatterns = [
    4. # url(r'^admin/', admin.site.urls),
    5. url(r'^app01/',include('app01.urls',namespace='app01')), # app01/home/
    6. url(r'^app02/', include('app02.urls',namespace='app02')),
    7. ]
    8. # 反向解析使用:
    9. # 后端:
    10. reverse('命名空间名称:别名') -- reverse('app01:home')
    11. # hmtl:
    12. {% url '命名空间名称:别名' %} -- {% url 'app01:home' %}
  • 代码示例:

    • item > urls

      1. from django.conf.urls import url,include
      2. from django.contrib import admin
      3. urlpatterns = [
      4. # url(r'^admin/', admin.site.urls),
      5. url(r'^app01/', include('app01.urls',namespace='app01')),
      6. url(r'^app02/', include('app02.urls',namespace='app02')),
      7. ]
    • app01 > urls

      1. from django.conf.urls import url
      2. from app01 import views
      3. urlpatterns = [
      4. url(r'^home/', views.home,name='home'),
      5. ]
    • app02 > urls

      1. from django.conf.urls import url
      2. from app02 import views
      3. urlpatterns = [
      4. url(r'^home/', views.home,name='home'),
      5. ]
    • app01 > views

      1. from django.shortcuts import render,HttpResponse,redirect
      2. from django.urls import reverse
      3. def home(request):
      4. print('app01>>>',reverse('app01:home'))
      5. return HttpResponse('app01的home页面')
    • app02 > views

      1. from django.shortcuts import render,HttpResponse,redirect
      2. from django.urls import reverse
      3. def home(request):
      4. print('app02>>>',reverse('app02:home'))
      5. return HttpResponse('app02的home页面')

补充:

  • 多对多查询,前端显示

    1. {% for server in projectenv.servers.all %}
    2. {{ server }}
    3. {% endfor %}
  • choices选项前端显示

    1. {{ projectenv.get_env_display }}

Django框架04 /模板相关、别名/反向解析/路由分发的更多相关文章

  1. day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询

    目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...

  2. Django框架----命名URL和URL反向解析

    在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等).人们强烈希望不要硬编码这些URL(费 ...

  3. Django(框架、模板)

    day65 参考:https://www.cnblogs.com/liwenzhou/p/8296964.html Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间 ...

  4. Django框架2——模板

    django框架2--模板 直接将HTML硬编码到你的视图里却并不是一个好主意: 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改. 站点设计的修改往往比底层 Python 代码的修 ...

  5. Django框架 之 模板语言

    Django框架 之 模板语言 浏览目录 标签 过滤器 一.标签 Tags 1.普通变量 普通变量用{{ }} 变量名由数字.字母.下划线组成 点.在模板语言中用来获取对象相应的属性值 示例: 1 2 ...

  6. Django框架03 /视图相关

    Django框架03 /视图相关 目录 Django框架03 /视图相关 1. 请求相关 2.响应相关 3.FBV和CBV 视图(视图函数和视图类) 3.1 类视图 CBV 3.2 视图函数 FBV ...

  7. 第三百一十节,Django框架,模板语言

    第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...

  8. Django框架之模板语法【转载】

    Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...

  9. [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)

    一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...

随机推荐

  1. HttpClient 常用方法封装

    简介 在平时写代码中,经常需要对接口进行访问,对于 http 协议 rest 风格的接口请求,大多使用 HttpClient 工具进行编写,想着方便就寻思着把一些常用的方法进行封装,便于平时快速的使用 ...

  2. android中的逐帧动画

    在android中实现动画最简单的一种方式就是使用逐帧动画(AnimationDrawable).逐帧动画的原理同最古老的动画机制是一样的,通过快速的播放一组变化微小的图片,在人眼的视差时间下,达到一 ...

  3. numpy中np.array()与np.asarray的区别以及.tolist

    array 和 asarray 都可以将 结构数据 转化为 ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会. 1.输 ...

  4. linux 上设置mysql开机自启

    此方式是通过安装包安装的,如果是yum安装的rpm包,可参考yum安装MySQL8.0 三个月之前安装的mysql,记得是设置了开机自启,但是今天再次进入的时候发现,无法登录,报错如下 原因是mysq ...

  5. skywalking中表字段的信息

    https://skyapm.github.io/document-cn-translation-of-skywalking/zh/6.2.0/concepts-and-designs/scope-d ...

  6. easymock案例2

    public interface IStudent { public String doMethod1(); public String doMethod2(); public String doMe ...

  7. 使用 Masstransit中的 Request/Response 与 Courier 功能实现最终一致性

    简介 目前的.net 生态中,最终一致性组件的选择一直是一个问题.本地事务表(cap)需要在每个服务的数据库中插入消息表,而且做不了此类事务 比如:创建订单需要 余额满足+库存满足,库存和余额处于两个 ...

  8. ES7.x客户端的认证创建一步一步来

    前言 好久没来写博客了,还是简单的记录一下吧.今天要写的是es在7.x版本后的客户端的创建以及一些es的查询所语句到的小问题.直接先吧客户端端的代码呈上. 正文 public class ESClie ...

  9. SpringBoot项目jar包启动脚本

    startup.bat @echo off set path=X:\xxxxxxx\Java\JDK\jre\bin START "项目名" "%path%\java&q ...

  10. js省市二级联动实例

    //动态创建省市二级联动<!DOCTYPE html><html lang="en"><head> <meta charset=" ...