2024--Django平台开发-Django知识点(三)
- day03 django知识点
- 项目相关
- 路由相关 urls.py
- 视图相关 views.py
- 模版相关 templates
- 资源相关 static/media
1.项目相关
- 新项目
- 开发时,可能遇到使用其他的版本。
- 虚拟环境
- 老项目
- 打开项目
- 虚拟环境
1.1 关于新项目
1.系统解释器+命令行【学习】
C:/python38- python.exe- Scripts- pip.exe- pip3.8.exe- django-admin.exe- Lib- re.py- site-pakages- djangoC:/python39- python.exe- Scripts- pip.exe- pip3.9.exe- django-admin.exe- Lib- re.py- site-pakages- django
>>>C:/python39/Scripts/pip install django
-
django项目
>>>E: >>>cd code >>>C:/python39/Scripts/django-admin startproject mysite -
目录结构
E:\code\mysite- mysite- urls.py URL和函数对应关系- wsgi.py 底层请求处理入口【同步】- asgi.py 底层请求处理入口【异步】- settings.py 配置文件(内置配置文件global_settings假设200项配置 + 用户3项配置 =201配置)- manage.py [管理项目] -
运行项目
>>>cd mysite >>>C:\python39\python manage.py runserver -
对应关系 urls.py
from django.http import HttpResponsedef demo(request):return HttpResponse("OK")urlpattens = [path("demo/",demo), ]
2.虚拟环境+命令行【线上部署】
C:\python39- python.exe- Scripts- pip.exe- pip3.9.exe- virtualenv.exe- Lib- re.py- site-pakages
>>>C:\python39\pip install virtualenv
a.创建虚拟环境
>>>C:\python39\Scripts\virtualenv F:\envs\x1 --python=python3.9
F:\envs\x1- python.exe- Scripts- pip.exe- pip3.9.exe- activate.exe- django-admin.exe- Lib- site-pakages- django- ..
b.激活虚拟环境
>>>F:
>>>cd F:\envs\x1\
>>>activate.exe
c.激活虚拟环境
(x1)>>>pip install django
(x1)>>>pip install django==3.2
d.创建项目
(x1)>>>django-admin startproject mysite
3.虚拟环境+Pycharm【最新django】
E:\PycharmProjects\day002
E:\PycharmProjects\day002\.venv
注意:第2期,都是基于这种方式去创建项目。
4.虚拟环境+Pycharm【老django】
本质:
- 虚拟环境
- 安装老版本django
- 基于django-admin 创建项目
- 在Pycharm中配置:项目 + 环境 => 绑定
a.虚拟环境

b.安装老版本django
(.venv) E:\PycharmProjects\day003>pip install django==3.2
c.创建django项目
(.venv) E:\PycharmProjects\day003>django-admin startproject day003
E:\PycharmProjects\day003\day003- day003...- manage.py
(.venv) E:\PycharmProjects\day003>django-admin startproject day003 .
E:\PycharmProjects\day003- day003...- manage.py
d.Pycharm配置

小结
-
系统解释器 和 虚拟环境
-
命令行【线上部署】
-
安装virtualenv
-
创建虚拟环境
-
激活虚拟环境
-
安装django
pip install django pip install django==3.2 -
创建新项目
django-admin startproject xxxx -
编写代码
-
运行项目
python manage.py runserver python manage.py runserver 8000 python manage.py runserver 127.0.0.1:8000
-
-
Pycharm【开发】
-
最新版本的django
注意事项:pycharm为了防止大家用低版本pycharm,例如:2020.1版本的pycharm -
老旧版本的django
-
虚拟环境
-
安装老旧django
-
创建项目
django-admin startproject xxxx . -
Pycharm配置:项目 + 环境
-
-
1.2 关于老项目
- 代码下载下来
- 创建虚拟环境
- 虚拟环境 + 项目绑定 + 安装必备的模块
注意:requirements.txt + Python解释器(问、文档)
1.3 纯净版项目
django内置有100个功能,5个功能是项目使用概率比较大。
- 创建Django项目时,默认配置上功能。
- 创建Django项目时,默认配置剔除。
Django纯净和Flask等轻量级框架的对比:
- Flask,一个py文件项目,基于蓝图项目创建结构化。
- Django,默认的配置,剔除 好几个文件。
a.创建项目
E:/PycharmProjects/day004- day004- urls.py URL和函数对应关系- wsgi.py 底层请求处理入口【同步】- asgi.py 底层请求处理入口【异步】- settings.py 配置文件(内置配置文件global_settings假设200项配置 + 用户3项配置 =201配置)- manage.py [管理项目]
b.默认功能
INSTALLED_APPS = ['django.contrib.admin', # django内置后台管理,简单数据库的增删改查'django.contrib.auth', # 用户登录和认证权限'django.contrib.contenttypes', # 复杂表结构关系'django.contrib.sessions', # 如果项目中有登录成功让用户可以访问。'django.contrib.messages', # 消息展示,依赖Session'django.contrib.staticfiles', # 静态资源处理,图片、css、js等
]
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
# 找功能模块,将功能模块中需要创建表结构,创建出来。
>>>python manage.py makemigrations 【找功能模块】【表结构】【生成配置文件并放到指定目录】
>>>python manage.py migrate 【读取生成的配置文件,提交到数据库】
>>>python manage.py createsuperuser
纯净版配置:
# Application definitionINSTALLED_APPS = [# 'django.contrib.admin',# 'django.contrib.auth',# 'django.contrib.contenttypes',# 'django.contrib.sessions',# 'django.contrib.messages','django.contrib.staticfiles',
]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',
]TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'templates'],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request',# 'django.contrib.auth.context_processors.auth',# 'django.contrib.messages.context_processors.messages',],},},
]
from django.contrib import admin
from django.urls import pathurlpatterns = [# path('admin/', admin.site.urls),
]
小结
- 本地开发:基于Pycharm创建项目(新版本、老旧版)
- 本地开发:打开别人的项目
- 创建纯净版项目
1.4 关于APP
创建的django项目:
E:/PycharmProjects/day004- day004- urls.py URL和函数对应关系- wsgi.py 底层请求处理入口【同步】- asgi.py 底层请求处理入口【异步】- settings.py 配置文件(内置配置文件global_settings假设200项配置 + 用户3项配置 =201配置)- manage.py [管理项目]
关于APP,主要用于业务功能模块的开发。
-
创建APP
python manage.py startapp app01 python manage.py startapp app02E:/PycharmProjects/day004- day004- urls.py URL和视图函数对应关系- wsgi.py 底层请求处理入口【同步】- asgi.py 底层请求处理入口【异步】- settings.py 配置文件(内置配置文件global_settings假设200项配置 + 用户3项配置 =201配置)- manage.py [管理项目]- app01- migrations - ..- ...- models.py 用ORM代替原生SQL语句(对类和对象进行操作 -> SQL语句 -> 自动执行)编写类 + makemigraions/migrate -> 数据库- apps.py "app01.apps.App01Config"- admin.py 配合django-admin可以对当前app中的表进行增删改查操作。- test.py 单元测试(不写单元测试)- views.py 业务功能【视图函数】- app02- migrations - models.py- admin.py- apps.py- test.py- views.py
注意:一般情况下一个app就够了;开源组件;公共模块,拆分到单独的app模块。
多app应用的目录结构:
-
单独1个app的项目 【推荐】
E:/PycharmProjects/day004- day004- urls.py URL和视图函数对应关系- wsgi.py 底层请求处理入口【同步】- asgi.py 底层请求处理入口【异步】- settings.py 配置文件(内置配置文件global_settings假设200项配置 + 用户3项配置 =201配置)- manage.py [管理项目]- app01- migrations - ..- ...- models.py 用ORM代替原生SQL语句(对类和对象进行操作 -> SQL语句 -> 自动执行)编写类 + makemigraions/migrate -> 数据库- apps.py "app01.apps.App01Config"- admin.py 配合django-admin可以对当前app中的表进行增删改查操作。- test.py 单元测试(不写单元测试)- views.py 业务功能【视图函数】 -
多个app

-
多个app,放在apps的文件夹中 【推荐】
E:/PycharmProjects/day004- apps- app01- views.py- admins.py- models.py...- app02- views.py- admins.py- models.py...- app03- views.py- admins.py- models.py...- day004- urls.py URL和视图函数对应关系- wsgi.py 底层请求处理入口【同步】- asgi.py 底层请求处理入口【异步】- settings.py 配置文件(内置配置文件global_settings假设200项配置 + 用户3项配置 =201配置)- manage.py [管理项目]到底什么时候创建1个app?什么时候创建多个app?
-
案例1:公司官网
app01: -> 公司官网开发,主要使用者:学员。 app02: -> 内部运营使用的功能模块 app03: -> 导师下载作业、批改作业、评分。 -
案例2:公司官网【现阶段】
app01:公司官网开发,主要使用者:学员。内部运营使用的功能模块导师下载作业、批改作业、评分。app01: -> 公司官网开发,主要使用者:学员。 app02: -> 内部运营使用的功能模块 app03: -> 导师下载作业、批改作业、评分。
-
2.路由系统
2.1 常见操作
通俗的语言来表示:URL -> 函数对应关系

2.2 路由源码分析
2.2.1 路由定义的本质

from django.urls import path, re_path
from apps.www import viewsfrom django.urls import URLPattern
from django.urls.resolvers import RoutePatternurlpatterns = [URLPattern(RoutePattern("login/", name=None, is_endpoint=True), views.login, None, None),path('login/', views.login, name='n1'),# http://127.0.0.1:8000/info/2222/# http://127.0.0.1:8000/info/2222/?a1=1&b1=2# path('info/<int:v1>/', views.info),# http://127.0.0.1:8000/other/11/yiyebaitou/# http://127.0.0.1:8000/other/222/shiyi/# path('other/<int:v1>/<str:v2>/', views.other),# path('xx/<path:v2>/', views.xx),# path('xx/<uuid:v2>/', views.xx),# http://127.0.0.1:8000/yy/2014-11-11# re_path(r'yy/(\d{4})-(\d{2})-(\d{2})/', views.yy),
]
-
编写路由
-
启动项目时
urlpatterns = [对象(URL地址、函数),对象(URL地址、函数),对象,对象,对象,URLPattern(RoutePattern("login/", name=None, is_endpoint=True), views.login, None, None), ]# 内部路由匹配的时,默认执行: URLPattern.resolveself.pattern.match()return ResolverMatch(...)# 进阶操作 # 路由系统中的扩展点:URLPattern.resolveRoutePattern.match自定义ResolverMatch类 -
用户浏览器访问
http://127.0.0.1:8000/login/ -
django的源码内部,一定会匹配,获得相应的视图函数
http://127.0.0.1:8000 /login/urlpatterns = [对象(URL地址、函数),对象(URL地址、函数),对象,对象,对象 ]urlconf = 'day006.urls' resolver = URLResolver(RegexPattern(r"^/"), urlconf)resolver_match = resolver.resolve(request.path_info)callback, callback_args, callback_kwargs = resolver_match -
执行视图函数
听完的感受:
-
流程是懵逼,Django请求的流程懵逼【证明】。
-
我们需要基于源码记住
urlpatterns = [path('login/', views.login),path('info/<int:v1>/', views.info), ]urlpatterns = [URLPattern(RoutePattern("login/", name=None, is_endpoint=True), views.login, None, None),URLPattern(RoutePattern("login/", name=None, is_endpoint=True), views.login, None, None),URLPattern(RoutePattern("login/", name=None, is_endpoint=True), views.login, None, None),URLPattern(RoutePattern("login/", name=None, is_endpoint=True), views.login, None, None), ] -
源码内部路由匹配的时,是怎么做的?
URLPattern.resolveRoutePattern.matchdef resolve(self, path):match = self.pattern.match(path)if match:new_path, args, captured_kwargs = match# Pass any default args as **kwargs.kwargs = {**captured_kwargs, **self.default_args}return ResolverMatch(self.callback,args,kwargs,self.pattern.name,route=str(self.pattern),captured_kwargs=captured_kwargs,extra_kwargs=self.default_args,)def match(self, path):match = self.regex.search(path)if match:# RoutePattern doesn't allow non-named groups so args are ignored.kwargs = match.groupdict()for key, value in kwargs.items():converter = self.converters[key]try:kwargs[key] = converter.to_python(value)except ValueError:return Nonereturn path[match.end() :], (), kwargsreturn None
2.3 name别名
path('login/', views.login, name='n1'),
URLPattern(RoutePattern("login/", name="n1", is_endpoint=True), views.login, None, "n1"),
def login(request):return HttpResponse("欢迎登陆")
from django.urls import reverseresult = reverse("n1")
print(result) # "login/"
path('api/auth/login/<int:v1>/', views.login, name='n1'),
def login(request,v1):return HttpResponse("欢迎登陆")
from django.urls import reverseresult = reverse("n1",kwargs={"v1":123})
print(result) # "/api/auth/login/123/"result = reverse("n1",kwargs={"v1":999})
print(result) # "/api/auth/login/999/"
name存在的意义?例如:用户登录登录程序
/api/auth/login/ -> 函数登录
/api/user/account/ -> 函数账单
path('api/auth/login/', views.login, name='n1'),
path('api/user/account/', views.account, name='n2'),
def login(request):# 当用户登录成功之后,需要让用户跳转到 /api/user/account/ 页面# return redirect("/api/user/account/")# url = reverse("n2") # "/api/user/account/"# return redirect(url)return redirect("n2")def account(request):return HttpResponse("用户信息")
name存在的意义?例如:权限管理
A用户有权访问的网址:/api/auth/login/ /api/user/account//api/user/order//api/user/order/<int:v1>/B用户有权访问的网址:/api/user/account//api/user/order//api/user/order/<int:v1>/
A用户有权访问的网址:n1n2n3B用户有权访问的网址:n2n3
总结
-
创建Django项目
- 虚拟环境 + 新版本
- 虚拟环境 + 老旧版
-
app的概念
- 1个app
- 多个app(apps文件夹)
-
路由系统
-
【必备】常见路由操作
# http://127.0.0.1:8000/info/2222/ # http://127.0.0.1:8000/info/2222/?a1=1&b1=2 path('info/<int:v1>/', views.info),# http://127.0.0.1:8000/other/11/yiyebaitou/ # http://127.0.0.1:8000/other/222/shiyi/ path('other/<int:v1>/<str:v2>/', views.other),# path('xx/<path:v2>/', views.xx), # path('xx/<uuid:v2>/', views.xx),# http://127.0.0.1:8000/yy/2014-11-11 re_path(r'yy/(\d{4})-(\d{2})-(\d{2})/', views.yy),
-
【必备】name别名
- 反向别名生成URL地址
- 权限分配,不会用URL网址而是使用name别名。
-
【可选】源码的流程+扩展点
MyURLPattern(MyRoutePattern("login/", name=None, is_endpoint=True), views.login, None, None), URLPattern(RoutePattern("login/", name="n1", is_endpoint=True), views.login, None, "n1"),django.urls.resolvers.URLResolver.resolve django.urls.URLPattern.resolve django.urls.resolvers.RoutePattern.matchdjango.urls.resolvers.URLResolver.resolvefor obj in ....:# django.urls.URLPattern.resolve# obj.resolve# self.pattern.matchdjango.urls.resolvers.RoutePattern.match
-
相关文章:
2024--Django平台开发-Django知识点(三)
day03 django知识点 项目相关路由相关 urls.py视图相关 views.py模版相关 templates资源相关 static/media 1.项目相关 新项目 开发时,可能遇到使用其他的版本。虚拟环境 老项目 打开项目虚拟环境 1.1 关于新项目 1.系统解释器命令行【学习】 C:/python38- p…...
Github 2024-01-08开源项目周报 Top14
根据Github Trendings的统计,本周(2024-01-08统计)共有14个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目3C项目2Dart项目1QML项目1Go项目1Shell项目1Rust项目1JavaScript项目1C#项目1 免费…...
vue3 的内置组件汇总
官方给出的说明: Fragment: Vue 3 组件不再要求有一个唯一的根节点,清除了很多无用的占位 div。Teleport: 允许组件渲染在别的元素内,主要开发弹窗组件的时候特别有用。Suspense: 异步组件,更方便开发有异步请求的组件。 一、fr…...
ARM工控机Node-red使用教程
嵌入式ARM工控机Node-red安装教程 从前车马很慢书信很远,而现在人们不停探索“科技改变生活”。 智能终端的出现改变了我们的生活方式,钡铼技术嵌入式工控机协助您灵活布建能源管理、大楼自动化、工业自动化、电动车充电站等各种多元性IoT应用ÿ…...
Visual Studio 发布程序自动更新 ClickOnce和AutoUpdater测试
文章目录 前言运行环境ClickOnce(Visual Studio 程序发布)IIS新建文件夹C# 控制台测试安装测试更新测试卸载 AutoUpdaterDotNET实现原理简单使用新建一个WPF项目 代码封装自动更新代码封装简单使用 总结 前言 虽然写的大部分都是不联网项目,…...
Codeforces Round 761 (Div. 2) E. Christmas Chocolates(思维题 树的直径 二进制性质 lca)
题目 n(n<2e5)个值,第i个值ai(0<ai<1e9),所有ai两两不同 初始时,选择两个位置x,y(x≠y),代表需要对这两个位置进行操作,要把其中一个值变成另一个 你可以执行若干次操作,每一次,你可…...
知识图谱之汽车实战案例综述与前瞻分析
知识图谱的前置介绍 什么是知识图谱 知识图谱本质(Knowledge Graph)上是一种叫做语义网络(semantic network ) 的知识库,即具有有向图结构的一个知识库;图的结点代表实体(entity)或者概念(con…...
网关Gateway
什么是网关? 网关实质上是一个网络通向其他网络的 IP 地址,是当前微服务项目的"统一入口"。 网关能做什么? 反向代理 、鉴权、 流量控制、 熔断、 日志监控等 图片原文:http://t.csdnimg.cn/SvUJh 核心概念 Router(…...
java 生成一个当前时间的时间搓
开发过程中 用时间搓数值格式存储 会更加精准 那么 我们在一些日常增删查改中就可以用时间搓来记录操作时间 就一行代码 long timestamp System.currentTimeMillis();他就能生成当前时间的时间搓 运行结果如下 然后 我们可以在 http://shijianchuo.wiicha.com/ 上进行转换查…...
金融中IC和IR的定义
当谈到金融领域时,IC(Information Coefficient)和IR(Information Ratio)通常是用来评估投资组合管理绩效的指标。它们都涉及到投资者对信息的利用和管理的效果。 信息系数(IC - Information Coefficient&a…...
Git(2):Git环境的安装
本教程里的git命令例子都是在Git Bash中演示的,会用到一些基本的linux命令,在此为大家提前列举: ls/ll 查看当前目录cat 查看文件内容touch 创建文件vi vi编辑器(使用vi编辑器是为了方便展示效果,学员可以记事本、edi…...
Pytest单元测试系列[v1.0.0][pytest插件常用技巧]
使用pytest-xdist并发执行测试 pytest-xdist:Run Tests in Parallel [https://pypi.python.org/pypi/pytest-xdist] 在自动化测试中有些资源只能同时被一个测试用例访问,如果不需要同时使用同一个资源,那么测试用例便可以并行执行 执行命令…...
嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第五天-Linux消息共享内存练习题(物联技术666)
更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…...
04set注入专题/简单类型/数组/List/Set/Map/空字符串/null/特殊符号
1.1注入外部Bean 在之前使用的案例就是注入外部Bean的方式。 <!-- class属性声明要管理哪个类中的对象 property标签的name是提示set方法名ref标签指明注入的bean的id--><bean id"userServiceBean" class"com.powernode.spring6.service.UserService…...
Linux引导和服务管理
目录 一.Linux引导: 1、Linux开机启动的完整过程: 2、bios的作用: 3、boot: 4.mbr: 5、grub: 6、加载内核文件: 7、启动进程: 8、centos6与centos7的区别: 9、完整的过程 …...
HarmonyOS 应用开发学习笔记 ets自定义组件及其引用 @Component自定义组件
Component注解的作用是用来构建自定义组件 Component组件官方文档 自定义组件具有以下特点: 可组合:允许开发者组合使用系统组件、及其属性和方法。 可重用:自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容器…...
在做题中学习(43):长度最小的子数组
LCR 008. 长度最小的子数组 - 力扣(LeetCode) 解法:同向双指针-------滑动窗口算法 解释:本是暴力枚举做法,因为全部是正整数,就可以利用单调性和双指针解决问题来节省时间 思路: 如上面图&am…...
如何将 element-ui 中的 el-select 默认展开
<el-form-item label"藕粉桂花糖糕" prop"state" required><el-selectref"mySelect"v-model"form.state"style"width: 280px"placeholder"请选择"><el-option label"藕粉" :value"…...
Typora基本用法
文章目录 一、标题标题快捷键 二、段落1.换行2.分割线 三、文字显示1.字体2.上下标 四、列表1.无序列表2.有序列表3.任务列表 五、区块显示六、代码显示1.行内代码2.代码块 七、链接八、脚注九、图片插入十、表格十一、流程图十二、表情符号十三、数学公式的输入1.公式的插入①…...
读元宇宙改变一切笔记02_元素(上)
1. 很多组织和机构都想在元宇宙的定义上掌握话语权,使得它的定义中存在矛盾之处,也有大量含义混淆之处 1.1. 微软 1.1.1. 在谈论“多个元宇宙” 1.1.2. 微软首席执行官萨提亚纳德拉将元宇宙描述为一种可以将“整个…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
