当前位置: 首页 > news >正文

Django框架二

一、模型层及ORM

1.模型层定义

         负责跟数据库之间进行通信

2.Django配置mysql 

       安装mysqlclient,mysqlclient版本最好在13.13以上

pip3 install mysqlclient 

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': "mysite1",'USER':'root','PASSWORD':'123456','HOST':'127.0.0.1','PORT':'3306',}
}

 3.什么是模型

 4.ORM框架

映射图

5.数据库迁移

 6.模型类创建

 示例

from django.db import modelsclass Book(models.Model):title = models.CharField(verbose_name='书名',max_length=50,default='')price = models.DecimalField(verbose_name='价格',max_digits=7,decimal_places=2)

小结:

        任何关于表结构的修改,都要在模型类上进行修改

        解决方案

                - 模型类中添加 对应 类属性

                - 执行数据库迁移 

二、基础字段及选项1

1.字段类型

        auto_now()                - 用作更新时间字段

        aotu_now_add           - 用作创建时间 字段

 

         用于价格、钱相关的字段

        EmailField        - 用于邮箱字段 

        ImageField()        - 图片 

 三、基础字段及选项2

1.字段选择项

指定创建的列的额外信息

允许出现多个字段选项,多个选项之间使用逗号隔开

 

         

         null和blank区别:

                null是针对数据库而言

                blank是针对表单的

 示例

 2.Meta类

        使用内部Meta类来给模型赋予属性

示例

from django.db import models# Create your models here.
from django.db import modelsclass Book(models.Model):title = models.CharField('书名',max_length=5,unique=True,default='')pub = models.CharField('出版社',max_length=100,default='')price = models.DecimalField('价格',max_digits=7,decimal_places=2)market_price = models.DecimalField('零售价',max_digits=7,decimal_places=2,default=0.0)info = models.CharField('描述',max_length=100,default='')class Meta:db_table = 'book'class Author(models.Model):name = models.CharField('姓名',max_length=11,null=False)age = models.IntegerField('年龄',default=1)email = models.EmailField('邮箱',null=True)class Meta:db_table = 'author'

小结:

常见问题1:

 

 常见问题2:

四、ORM基本操作

1.ORM创建数据

        ORM基本操作包括增删改查,即CRUD

        核心

                模型类.管理器对象

2.管理器对象

 示例

3.创建数据

方案一、

Model.objects.create(属性1=值1,。。。。)

成功:返回创建好的实体对象

失败:抛出异常

方案二、

创建Molde实例化对象,并调用save()保存

obj = Model(属性=值,。。。)

obj.属性 = 值

obj.save()

4.Django Shell

        利用django shell可以代替编写view的代码来进行直接操作

        启动方式:python    manage.py   shell

from bookstore.models import Book
b1 = Book.objects.create(title='Java',pub='清华大学出版社',price=20,market_price=68,info='java入门到入土')
b2 = Book(title='VUE',pub='清华大学出版社',price=30,market_price=108,info='VUE入门')
b2.save()

五、ORM查询操作1

1.查询简介

通过管理器方法调用查询方法

2.查询方法

         

bb1 = Book.objects.all()
for book in bb1:
...     print(book.title)
...

         可以在模型类中定义__str__方法,自定义QuerySet的输出格式

def __str__(self):

        return '%s%s%s%s%s'%(self.title,self.pub,self.price,self.market_price,self.info)

        在Django Shell 中输出如下

<QuerySet [<Book: Java清华大学出版社20.0068.00java入门到入土>, <Book: VUE清华大学出版社30.00108.00VUE入门>, <Book: Dj清华大学出版社70.00178.00Django入门>,
<Book: JS机械出版社90.00198.00JS入门>, <Book: Linux机械出版社80.00188.00Linux入门>, <Book: HTML清华大学出版社90.00198.00HTML入门>]>
>>>

 

示例

>>> b2 = Book.objects.values('title','pub')
>>> b2

         输出

<QuerySet [{'title': 'Java', 'pub': '清华大学出版社'}, {'title': 'VUE', 'pub': '清华大学出版社'}, {'title': 'Dj', 'pub': '清华大学出版社'}, {'title': 'JS', 'pub': '机械出版社'}, {'title': 'Linux', 'pub': '机械出版社'}, {'title': 'HTML', 'pub': '清华大学出版社'}]>
>>>

示例

>>> b3 = Book.objects.order_by('-price')
>>> for book in b3:
...     print(book.price)
...

        输出 

90.00
90.00
80.00
70.00
30.00
20.00

查询案例:

总路由:

path('bookstore/',include('bookstore.urls')),

子路由:

from django.urls import path,re_path,include
from . import views
urlpatterns = [path('all_book',views.all_book),
]

视图:

from django.shortcuts import render
from bookstore.models import Book
# Create your views here.
def all_book(request):book = Book.objects.all().order_by('-id')return render(request,'bookstore/test_book.html',locals())

模板:

<body><table border="1"><thead><tr><th>id</th><th>标题</th><th>出版社</th><th>价格</th><th>零售价</th><th>操作</th></tr></thead><tbody>{% for book in book %}<tr><td>{{book.id}}</td><td>{{book.title}}</td><td>{{book.pub}}</td><td>{{book.price}}</td><td>{{book.market_price}}</td><td><a href="#">更新</a><a href="#">删除</a></td></tr>{% endfor %}</tbody></table>
</body>

六、ORM查询操作2

1.条件查询

样例

示例

2.查询谓词

__exact:等值匹配

模糊查询

        __contains:包含指定的值

         __startswith:以xxx开始

        __endswith:以xxx结束

 __gt:大于指定值

__gte:大于等于指定值

__lt:小于指定值

__lte:小于等于指定值

__in:查找数据是否在指定范围内

__range:查找数据是否在指定的区间范围内

 七、ORM更新数据

1.更新单个数据

b1 = Book.objects.get(id=1)
>>> b1
<Book: Java清华大学出版社20.0068.00java入门到入土>
>>> b1.price = 22
>>> b1.save()

2.批量更新数据

        直接调用QuerySet的update(属性=值)实现批量修改 

url

path('update_book/<int:book_id>',views.update_book),

view

def update_book(request,book_id):try:book = Book.objects.get(id=book_id)except Exception as e:return HttpResponse('书不存在')print(book)if request.method == 'GET':return render(request,'bookstore/update_book.html',locals())elif request.method == 'POST':price = request.POST['price']market_price = request.POST['market_price']#改book.price = pricebook.market_price = market_price#保存book.save()# book = Book.objects.all().order_by('-id')# return render(request,'bookstore/test_book.html',{"book":book})return HttpResponseRedirect('/bookstore/all_book')

template

<form action="/bookstore/update_book/{{book.id}}" method="post"><p>title<input type="text" value="{{book.title}}" disabled="disabled"></p><p>pub<input type="text" value="{{book.pub}}" disabled="disabled"></p><p>price<input type="text" value="{{book.price}}" name="price"></p><p>market_price<input type="text" value="{{book.market_price}}" name="market_price"></p><p>info<input type="text" value="{{book.info}}" name="info"></p><p><input type="submit" value="更新"></p></form>

八、ORM删除

1.单个数据删除 

 

 2.批量删除

3.伪删除 

 url

path('delete_book',views.delete_book),

view

def delete_book(request):book_id = request.GET.get('book_id')if not book_id:return HttpResponse('请求异常')try:book = Book.objects.get(id=book_id,is_activ=True)except Exception as e:return HttpResponse('id错误')book.is_activ = Falsebook.save()return HttpResponseRedirect('/bookstore/all_book')

九、F对象和Q对象

1.F对象        

可以应用于点赞 

 

 2.Q对象

 

小结:

F对象:标记字段

Q对象:或与非

 十、聚合查询和原生数据库

 1.聚合查询

如:查询BOOK数据表中的全部书的平均价格,查询所有书的总个数等,都要用到聚合查询

聚合查询分为:

  • 整表聚合
  • 分组聚合

2.整表聚合

        聚合函数【需要导入】

 

>>> from django.db.models import *
>>> Book.objects.aggregate(res=Count('id'))
{'res': 6}

3.分组聚合

>>> bs = Book.objects.values('pub')
>>> bs.annotate(res=Count('id'))
<QuerySet [{'pub': '清华大学出版社', 'res': 4}, {'pub': '机械出版社', 'res': 2}]>
>>>
>>> bs.annotate(res=Count('id')).filter(res__gt=2)
<QuerySet [{'pub': '清华大学出版社', 'res': 4}]>
>>> ss = bs.annotate(res=Count('id')).filter(res__gt=2)
>>> print(ss.query)
SELECT `book`.`pub`, COUNT(`book`.`id`) AS `res` FROM `book` GROUP BY `book`.`pub` HAVING COUNT(`book`.`id`) > 2 ORDER BY NULL

 4.原生数据库

        查询:

        语法:

        返回值:

 

使用原生数据库操作时,小心SQL注入

 

 完全跨过模型类操作数据库        -查询/更新/删除

 

十一、admin后台管理1

admin配置步骤

创建后台管理帐号-该账号是管理后台最高权限帐号 

 python manage.py createsuperuser

Username (leave blank to use 'administrator'): admin
Email address: 1353973780@qq.com
Password:
Password (again):
Superuser created successfully.

127.0.0.1:8000/admin 

十二、admin后台管理2

1.注册自定义模型类

若自己定义的模型类也能在admin后台管理中显示和管理,需要将自己的类注册到后台管理界面

注册步骤:

        admin.py中 

from .models import Bookadmin.site.register(Book)

 2.修改自定义模型类的数据样式

在用户自定义的模型类中可以重写        def__str__(self)方法

        models.py 

class Book(models.Model):title = models.CharField('书名',max_length=5,unique=True,default='')pub = models.CharField('出版社',max_length=100,default='')price = models.DecimalField('价格',max_digits=7,decimal_places=2)market_price = models.DecimalField('零售价',max_digits=7,decimal_places=2,default=0.0)info = models.CharField('描述',max_length=100,default='')is_activ = models.BooleanField('是否活跃',default=True)class Meta:db_table = 'book'def __str__(self):return '%s%s%s%s%s'%(self.title,self.pub,self.price,self.market_price,self.info)

 3.模型管理器类

作用:为后台管理界面添加便于操作的新功能

说明:后台管理器类须继承自dajngo.contrib.admin里面的ModelAdmin

使用方法

案例

class BookManage(admin.ModelAdmin):#列表页显示哪些字段的列list_display = ['id','title','price','market_price']#控制list_play中的字段  哪些可以链接到修改页list_display_links = ['title']#添加过滤器list_filter = ['pub']#添加搜索查询(模糊)search_fields = ['title']#添加可在列表页编辑的字段list_editable=['price']
admin.site.register(Book,BookManage)

4.再谈Meta

        models.py 

class Book(models.Model):title = models.CharField('书名',max_length=5,unique=True,default='')pub = models.CharField('出版社',max_length=100,default='')price = models.DecimalField('价格',max_digits=7,decimal_places=2)market_price = models.DecimalField('零售价',max_digits=7,decimal_places=2,default=0.0)info = models.CharField('描述',max_length=100,default='')is_activ = models.BooleanField('是否活跃',default=True)class Meta:db_table = 'book'verbose_name = '图书'verbose_name_plural = verbose_name

十三、关系映射1

1.什么是关系映射

        通常不会将数据放到同一张表中,常见的关系映射

        一对一

        一对多

        多对多

2.一对一映射

        语法:OneToOneField(类名,on_delete=xxx)

class A(models.Model):

        ....

class B(models.Model):

        属性=models.OneToOneField(A,on_delete=xxxx)

        特殊字段选项【必须】

        on_delete   -   级联删除

        models.CASCADE  级联删除

        models.PROTECT  抛出ProtectedError以阻止被引用对象的删除

        SET_NULL 设置ForeignKey null;需要指定null=true

        SET_DEFAULT 将 ForeignKey设置为其默认值;必须设置ForeignKey的默认值

from django.db import models# Create your models here.
class Author(models.Model):name = models.CharField('姓名',max_length=11)class Wife(models.Model):name = models.CharField('姓名',max_length=11)author = models.OneToOneField(Author,on_delete=models.CASCADE)

        一对一【创建数据】

  •         无外键的模型类[Author]

author1 = Author.objects.create(name = 'xxx')

  •         有外键的模型类[Wife]

#关联xxx老师obj

1.wife1 = Wife.objects.create(name='x1x',author=author1)

#关联xxx老师对应主键值

1.wife1 = Wife.objects.create(name='x1x',author_id=1)    #author_id后写外键所对应的id

        一对一【查询数据】

正向查询:直接通过外键属性查询,则称为正向查询

#通过wife找author

from .models import author

wife = wife.objects.get(name='赵夫人')

print(wife.name,'的老公是',wife.author.name)

反向查询:没有外键属性的乙方,可以调用反向属性()查找到关联的另一方

        反向属性:models中创建类是django自带的

        当反向引用不存在时,会触发异常

author1= Author.objects.get(name=’赵老师‘)

author1.wife.name

十四、关系映射2

1.一对多-定义

        明确具体角色,在多表上设置外键

        如一个学校多个班级,一个班级多个学生

2.一对多-创建

语法:

        当一个A类可以关联多个B类对象时

class A(models.Model):

        ...

class B(models.Model):

        属性 = models.ForeignKey(A,on_delete = models.CASCADE3)

        ForeignKey必须指定on_delete模式

3.一对多-数据创建

        先创建一,在创建多

>>> from otm.models import *
>>> pub1 = Publisher.objects.create(name='清华大学出版社')
>>> BOok.objects.create(title='C++',publisher=pub1) 
>>> BOok.objects.create(title='Java',publisher_id=1)    

4.一对多-查询数据

        正向查询        通过publisher属性查询即可

        通过书查询出版社

>>> b1 = BOok.objects.get(id=1) 
>>> b1.publisher.name
'清华大学出版社'

        反向查询        通过Publisher查询 对应的所有的BOok

        通过出版社查询书

>>> pub = Publisher.objects.get(id=1) 
>>> books = BOok.objects.filter(publisher=pub) 
###        >>>books = pub.book_set.all()                        类名小写_set
>>> for item in books:
...     print(item.title) 
...
C++
Java
C

5.多对多-定义

        如每个人都有不同的学校,每个学校都有不同的学生

  •         mysql中创建多对多需要依赖第三章表来实现
  •         Django中无需手动创建第三张表,Django自动完成

        语法:

                属性 = models.ManyToManyField(MyModel)

6.多对多-创建

#作者
class Author(models.Model):name = models.CharField('姓名',max_length=11)
#书籍
class Book(models.Model):title = models.CharField('书名',max_length=11)authors = models.ManyToManyField(Author)

7.多对多-数据的创建

方案一、先创建author在关联book

        两个作家同时写了一本书

>>> from mtm.models import * 
>>> author1 = Author.objects.create(name='赵老师')
>>> author3 = Author.objects.create(name='张老师') 
>>> book1 = author1.book_set.create(title='Python')                     
>>> author3.book_set.add(book1) 

         一个作家写两本书

>>> 一个作家写两本书
>>> author1 = Author.objects.create(name='赵老师')
>>> book1 = author1.book_set.create(title='Python') 
>>> book2 = author1.book_set.create(title='Java')

方案二、先创建Book在关联author 

>>> book4 = Book.objects.create(title='JS')
>>> author2 = book.authors.create(name='xxxx')
>>> book.authors.add(author3)

 8.多对多-查询

        正向查询 有多对多属性的对象  查  另一个,即谁有桥  用有桥的对象 查另一个

                通过book查对应的所有Author

book.authors.all()        获取book对应的所有的author信息

book.authors.filter(age__gt=80)        获取book对应的作者中年龄大于80的作者信息

        反向查询

                通过author查询对应的所有的book

                利用反向属性book_set

author.book_set.all()

author.book_set.filter()

十五、cookies和sessions

1.会话定义

        从打开浏览器访问一个网站,到关闭浏览器结束此次访问,称之为一次绘画,

        HTTP协议是无状态的,导致绘画状态难以保持

        Cookies和Session就是为了保持会话状态而诞生的两个存储技术

2.Cookies定义

        是保存在客户端浏览器上的存储空间

        Chrome浏览器可以通过打开开发者工具的Application-》Storage-》Cookies查看和操作浏览器端所有的Cookies值

3.Cooies特点

        cookies在浏览器上是以键-值对的形式进行存储的,键值不能是中文

        存储的数据带有声明周期

         cookies中的数据是按域存储隔离的,不同的域之间无法访问

        cookies的内部数据会在每次访问网址时都会携带到服务器端,如果cookies过大会降低响应速度

4.Cookies的使用-存储

 例如:

        urls

path('set_cookies',view.set_cookies),

        view

def set_cookies(request):resp = HttpResponse('set cookies is ok')resp.set_cookie('uuname','zpw',500)return resp

         只要调用set_cookie这个方法,响应中就会有暗号

         修改cookie        就是用set_cookie重新赋值

 5.Cooies的使用-删除&获取

         获取

                 通过request.COOKIE   获取客户端的COOKIES数据

value = request.COOKIES.get('cookies名','默认值')

       例如

        urls

path('get_cookies',view.get_cookies),

        view

def get_cookies(request):value = request.COOKIES.get('uuname')return HttpResponse('value is %s'%(value))

        删除 

                删除指定的key的Cookie。如果key不存在则什么也不发生

                HttpResponse.delete_cookie(key)

responds = HttpResponse("已删除 xxxx")
responds.delete_cookie('xxxx')
return responds

十六、cookies和session-2

cookie实则是将数据存在浏览器上,session是将数据存在服务器上

1.session定义

        session是在服务器上开辟一段空间用于保留浏览器和服务器交互时的重要数据

        实现方式

                -使用session需要在浏览器客户端启动cookie,且在cookie中存储sessionid

               每个客户端都可以在服务器端有一个独立的Session

                -与请求者一一对应,不会共享数据

2.session初始配置

        settings.py中配置session

        启用session的应用

INSTALLED_APPS = [

    'django.contrib.sessions',

]

        启用session中间件 

MIDDLEWARE = [

    'django.contrib.sessions.middleware.SessionMiddleware',,

]

 3.session的使用

1.保存session的值到服务器

request.session['KEY' ]=Value

2.获取session的值

value = request.session['KEY']        #强取

value = request.session.get('KEY',None)

3.删除session

del request.session['KEY']

4.在settings中相关的配置

        SESSION_COOKIE_AGE

        作用:指定sessionID在cookies中的保存时长(默认是2周),如下

 SESSION_COOKIE_AGE=60*60*24*7*2

         SESSION_EXPIRE_AT_BROWSER_CLOSE = True

        设置只要浏览器关闭时,session就失效(默认False)

5.Django session的问题

        django_session表是单表设计;且该表数据量持续增大

        可以写一个定时器每天执行 python3 manage.py clearsessions        【该命令可删除已经过期的session数据】 

cookie和session对比

相关文章:

Django框架二

一、模型层及ORM 1.模型层定义 负责跟数据库之间进行通信 2.Django配置mysql 安装mysqlclient&#xff0c;mysqlclient版本最好在13.13以上 pip3 install mysqlclient DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: "mysite1",USER:root,PASSWO…...

工业相机与镜头参数及选型

文章目录 1、相机成像系统模型1.1 视场1.2 成像简化模型 2、工业相机参数2.1 分辨率2.2 靶面尺寸2.3 像元尺寸2.4 帧率/行频2.5 像素深度2.6 动态范围2.7 信噪比2.8 曝光时间2.9 相机接口 3、工业镜头参数3.1 焦距3.2 光圈3.3 景深3.4 镜头分辨率3.5 工作距离&#xff08;Worki…...

VSCode使用Makefile Tools插件开发C/C++程序

提起Makefile&#xff0c;可能有人会觉得它已经过时了&#xff0c;毕竟现在有比它更好的工具&#xff0c;比如CMake&#xff0c;XMake&#xff0c;Meson等等&#xff0c;但是在Linux下很多C/C源码都是直接或者间接使用Makefile文件来编译项目的&#xff0c;可以说Makefile是基石…...

用C语言验证“三门定理”

#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h>// 一个源自博弈论的数学游戏问题&#xff1a; // 参赛者会看见三扇门&#xff0c; // 其中一扇门的里面有一辆汽车&#xff0c; // 选中里面是汽车的那扇门&#xff0…...

计算机网络-分层结构,协议,接口,服务

文章目录 总览为什么要分层怎样分层正式认识分层概念小结 总览 为什么要分层 发送文件前要做的准备工作很多 把这个准备工作分层小问题解决&#xff0c;也就分层解决 怎样分层 每层相互独立&#xff0c;每层做的工作不同 界面自然清晰&#xff0c;层与层之间的接口能够体现…...

前端开发 2: CSS

在前端开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页样式的语言。它控制着网页的布局、颜色、字体等外观效果。在本篇博客中&#xff0c;我将为你介绍 CSS 的基础知识和常用技巧&#xff0c;帮助你更好地掌握前端开发中的样式设计。 CSS 基础知…...

嵌入式-Stm32-江科大基于标准库的GPIO4个小实验

文章目录 一 、硬件介绍二 、实验&#xff1a;LED闪烁、LED流水灯、蜂鸣器提示2.1 需求1&#xff1a;面包板上的LED以1s为周期进行闪烁。亮0.5s,灭0.5s.....2.2 需求2: 8个LED实现流水灯2.3 需求3&#xff1a;蜂鸣器不断地发出滴滴、滴滴.....的提示音。蜂鸣器低电平触发。 三、…...

HackTheBox - Medium - Linux - Noter

Noter Noter 是一种中型 Linux 机器&#xff0c;其特点是利用了 Python Flask 应用程序&#xff0c;该应用程序使用易受远程代码执行影响的“节点”模块。由于“MySQL”守护进程以用户“root”身份运行&#xff0c;因此可以通过利用“MySQL”的用户定义函数来利用它来获得RCE并…...

Uniapp多选Popup(弹出层)

uniapp中多选组件很少&#xff0c;故个人简单开发了一个&#xff0c;可简单使用&#xff0c;也可根据个人需求稍微改进 支持的功能 单选多选&#xff08;默认&#xff09;限制选择数量默认选中禁用选项 属性说明 属性默认值说明singlefalsetrue为开启单选&#xff0c;否则为…...

什么是网络安全?网络安全概况

网络安全涉及保护我们的计算机网络、设备和数据免受未经授权的访问或破坏。 这个领域包括多种技术、过程和控制措施&#xff0c;旨在保护网络、设备和数据免受攻击、损害或未授权访问。网络安全涉及多个方面&#xff0c;包括但不限于信息安全、应用程序安全、操作系统安全等 …...

c语言小游戏之扫雷

目录 一&#xff1a;游戏设计理念及思路 二&#xff1a;初步规划的游戏界面 三&#xff1a;开始扫雷游戏的实现 注&#xff1a;1.创建三个文件&#xff0c;test.c用来测试整个游戏的运行&#xff0c;game.c用来实现扫雷游戏的主体&#xff0c;game.h用来函数声明和包含头文…...

如何本地安装Python Flask并结合内网穿透实现远程开发

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

在线App封装技术:HTML5的新生命

HTML5封装的魅力所在HTML5带来了丰富的多媒体功能、地理位置服务、离线存储等特性&#xff0c;使得Web应用的体验更加接近原生App。封装HTML5到App中&#xff0c;可以大大缩短开发周期&#xff0c;降低开发成本&#xff0c;并且一次编写&#xff0c;多平台运行&#xff0c;极大…...

Spring Boot 4.0:构建云原生Java应用的前沿工具

目录 前言 Spring Boot简介 Spring Boot 的新特性 1. 支持JDK 17 2. 集成云原生组件 3. 响应式编程支持 4. 更强大的安全性 5. 更简化的配置 Spring Boot 的应用场景 1. 云原生应用开发 2. 响应式应用程序 3. 安全性要求高的应用 4. JDK 17的应用 总结 作…...

Debian系统写Mysql时中文出现乱码无法定入的问题解决方案

原因是操作系统可能精简安装&#xff0c;没有GBK字符集&#xff0c;只有UTF8在转换或使用的时候有问题。 使用locale -a查看系统支持的字符集。正常的比较全的字符集的操作系统如下&#xff1a; 有问题的操作系统字符集如下&#xff1a; 解决方案&#xff1a; 步骤1&#…...

CPMS靶场练习

关键&#xff1a;找到文件上传点&#xff0c;分析对方验证的手段 首先查看前端发现没有任何上传的位置&#xff0c;找到网站的后台&#xff0c;通过弱口令admin 123456可以进入 通过查看网站内容发现只有文章列表可以进行文件上传&#xff1b;有两个图片上传点 图片验证很严格…...

CTFhub-bak文件

CTFhub-Web-信息泄露-备份文件下载-bak文件 题目信息 解题过程 看到提示说和index.php有关&#xff0c;在url后面加index.php.bak&#xff0c;跳转到http://challenge-7a4da2076cfabae6.sandbox.ctfhub.com:10800/index.php.bak网址&#xff0c;即&#xff1a; 跳转到下载页…...

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…...

面试题-MySQL如何定位慢查询

慢查询出现的情况就这些&#xff1a;聚合查询、多表查询、表数据量过大查询、深度分页查询。 表象&#xff1a;页面加载过慢、接口压测响应时间过长&#xff08;超过1S&#xff09;。 假如你的业务接口就是比较慢&#xff0c;你怎么知道是SQL的问题呢&#xff1f;就算是SQL的…...

【C++PCL】点云处理K-Means点云分割

目录 1.原理介绍 2.代码效果 3.源码展示 4.参数调试 5.注意事项...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...