首页 文章 精选 留言 我的

精选列表

搜索[Web安全],共10000篇文章
优秀的个人博客,低调大师

Python全栈 Web(Django框架、forms对象、cookie、session)

forms模块的高级处理 将models和forms结合到一起使用 1.在forms.py中创建class 继承自forms.ModelForm 2.创建一个内部类Meta来关联Model model 指定要关联的实体类是谁 fields 指定从model中取出那些字段生成控件 取值 "__all__"表示全部属性都要生控件 列表 声明允许生成控件的属性名 labels 指定每个属性所关联的label 取值为字典 label = { '属性名':'label文本', '属性名':'label文本', } class RegisterForm(forms.ModelForm): #通过内部类Meta表示关联的信息 class Meta: #1.指定关联的Model model = User #2.指定要生成控件的字段们 fields = "__all__" #3.指定每个控件对应的label labels = { 'uphone':'电话号码', 'upwd':'登录密码', 'uname':'用户名称', 'uemail':'电子邮件', } if request.method == 'GET': form = RegisterForm() return render(request,'05-register.html',locals()) 小部件: 什么是小部件? widget表示生成到页面上的控件类型以及其他的HTML属性 常用小部件类型 TextInput: type="text" PasswordInput: type="password" NumberInput: type="number" EmailInput: type="email" URLInput: type="url" HiddenInput: type="hidden" CheckboxInput: type="checkbox" Textarea: <textarea></textarea> Select: <select></select> 小部件的使用 继承自forms.Form 基本 只需要指定控件的类型 class RemarkForm(forms.Form): 属性 = forms.CharField( label:'文本', widget=forms.小部件类型 ) 高级 指定控件类型的基础上 还允许设置HTML的一些相关属性 属性 = forms.CharField( label="文本" widget=forms.小部件类型( attrs = { "html属性名":"html属性值", "html属性名":"HTML属性值" } ) ) 继承自forms.ModelForm class xxxForm(forms.ModelForm): class Meta: model = User fields = "__all__" labels = { "属性":"label" } widgets = { "属性1": forms.小部件类型(attrs={ }), } class LoginForm(forms.ModelForm): class Meta: model = User fields = ['uphone','upwd'] labels = { 'uphone':'注册电话', 'upwd':'登录密码', } #指定小部件 widgets = { 'upwd':forms.PasswordInput(attrs={ 'placeholder':'请输入您的密码' }) } class WidgetLoginForm(forms.Form): uphone = forms.CharField(label='电话号码') #为pwd指定小部件,显示为 密码框 # upwd = forms.CharField(label='登录密码',widget=forms.PasswordInput) upwd = forms.CharField( label='登录密码', widget=forms.PasswordInput( attrs = { 'placeholder':'请输入密码', 'class':'form-control', } ) ) cookies在Django中的实现 django中使用cookies 设置cookies: 响应对象.set_cookie(key, value, expires) key:cookie的名字 value:cookie的值 expires:保存时间 以s为单位 响应对象: HttpResponse() resp = HttpResponse("hello") resp.set_cookie(response, "xxx.html", locals()) return resp render() 获取cookies的值: 通过request.COOKIES 获取当前站点下对的所有的cookie的信息 def login_views(request): if request.method == 'GET': #判断uname是否存在于cookies中,如果有的话,直接提示登录成功,否则,去往09-login模板 if 'uname' in request.COOKIES: return HttpResponse('您已成功登录过') return render(request,'09-login.html') else: # 获取用户名称和密码 uname=request.POST['uname'] upwd = request.POST['upwd'] # 判断用户名称和密码的 if uname=='wangwc' and upwd=='123456': # 如果用户名和密码正确的话,判断有没有勾住记住密码 resp = HttpResponse("登录成功") if 'isSaved' in request.POST: # 如果有勾住记住密码,则将用户名称保存进cookies resp.set_cookie('uname',uname,60*60*24*90) return resp else: return HttpResponse('登录失败') session在django中的实现: 设置session的值: request.session["key"] = value 获取session的值: value = request.session["key"] 删除session的值 del request.session["key"] 在settings.py中设置session的相关设置 SESSION_COOKIE_AGE 设置 sessionID在cookies中的保存时间 SESSION_COOKIE_AGE = 60 * 60 * 24 # 最多保存24小时 SESSION_EXPIRE_AT_BROWSER_CLOSE 设置关闭浏览器是则清空服务器上对应的session空间 bool值 # 设置session def setSession_views(request): request.session['uname']='wangwc' return HttpResponse('Set Session Succefull') # 获取session def getSession_views(request): uname = request.session['uname'] return HttpResponse('uname:'+uname)

优秀的个人博客,低调大师

Python全栈 Web(Django框架、后台管理,ORM关系)

F查询和Q查询: F() 在之执行中获取某字段的值 F("字段名") 将所有人的年龄加10 form django.db.models import F Author.objects.all().update(age=F("age")+10) def doF_views(request): Author.objects.all().update(age=F('age')+10) return redirect('/07-queryall') Q() 在查询条件中可以完成or操作 Q(条件)|Q(条件) 查询所有id为1或年龄为48的人的信息 form django.db.models import Q Author.objects.filter(Q(id=1)|Q(age=48)) authors = Author.objects.filter(Q(age=30|Q(id__gt=20))) 原生的数据库操作方法: 查询: 函数:raw(sql) Entry.objects.raw(sql) 返回值:QuerySet 增删改: from django.db import connection with connection.cursor() as cursor sql = "delete from ..." cursor.execute(sql) return "" def raw_views(request): sql = "select * from index_author where age>45" authors = Author.objects.raw(sql) for au in authors: print(au.name,au.age,au.email) return HttpResponse("Query OK") 使用后台管理 models 创建后台管理员 ./manage.py createsuperuser username:输入用户名 如果不写默认为系统名称 email Address:电子邮件 Password:密码 Password(agian):重复密码 基本管理: 在应用中的admin.py中注册要管理的数据 1.admin.py 注册需管理的models类 只有在此注册的models类才允许被管理 2.注册models from .models import * admin.site.register(Entry) 通过models类的内部类 meta 来定义展现形式 class Author(models.Model): ... ... class Meta: db_table 指定实体类映射到表的名字 (该属性设置完成后会同步到数据库) verbose_name 定义实体类在admin中现显示的名字(单数) verbose_name_plural 定义实体类在admin中显示的名字(复数) #创建 Author 的实体类 #1.name - 姓名(CharField -> varchar) #2.age - 年龄(IntegerField -> int) #3.email - 电子邮件(EmailField -> varchar) class Author(models.Model): name = models.CharField(max_length=30,verbose_name='姓名') age = models.IntegerField(verbose_name='年龄') email = models.EmailField(null=True,verbose_name='邮件') #表示用户的激活状态:True,表示已激活,False,表示未激活 #由于是新增列,所以必须要给默认值或允许为空 #由于BooleanField默认是不允许为空的,所以此处选择了增加默认值 isActive = models.BooleanField(default=True,verbose_name='激活用户') #增加一个字段,表示用户的头像,可以上传的 picture = models.ImageField(upload_to="static/upload",null=True,verbose_name='头像') # 重写 __str__ ,来定义该对象的字符串表示 def __str__(self): return self.name #增加内部类Meta来定义其展现形式 class Meta: #1.修改表名为author db_table = 'author' #2.指定后台管理时要显示的名字 verbose_name = '作者' verbose_name_plural = verbose_name #3.指定排序规则 ordering = ['-age'] def __repr__(self): return "<Author:%r>" % self.name 高级管理: 在admin.py中创建高级管理类并注册 定义EntryAdmin 类 继承admin.ModelAdmin class AuthorAdmin(admin.ModelAdmin): pass 注册高级管理类 admin.site.register(Entry, EntryAdmin) 允许在EntryAdmin中增加属性 list_display 定义在列表页上显示的字段们 取值: 由属性名组成的元组或列表 list_display_links 定义在列表页也能链接到详情页的字段们 取值: 同上 这里的取值必须要出现在list_display中 list_editable 定义在列表页中允许被修改的字段们 取值: 同上 必须出现在list_display中 但是不能出现在list_display_links中 search_fields 添加允许搜索的字段们 取值 同上 list_filter 列表页的右测增加过滤器 实现快速筛选 date_hierarchy 列表页的顶部增加时间选择器 DateField 或 DateTimeField的列名 fields 在详情页中 指定显示那些字段 并按照什么样式的顺序显示 取值: 由属性名组成的列表或元组 fieldsets 在详情页面中 对字段们进行分组显示的 fieldsets 与 fields不能共存 取值: fieldsets = [ # 分组1 ("分组名称", { "fields":("属性1", "属性2") "classes": ("collapse") }), # 分组2 (), ] from django.contrib import admin from .models import * #声明高级管理类 class AuthorAdmin(admin.ModelAdmin): #指定在列表页中显示的字段们 list_display = ('name','age','email') #指定能够连接到详情页的字段们 list_display_links = ('name','email') #指定在列表页中就允许被修改的字段们 list_editable = ('age',) #指定条件的搜索字段们 search_fields = ('name','email') #指定右侧过滤器 list_filter=('name',) #指定显示的字段以及显示的顺序 # fields = ('name','isActive','email') #指定显示的字段分组 fieldsets = ( #分组1 ('基本信息',{ 'fields':('name','email'), }), #分组2 ('可选信息',{ 'fields':('age','isActive','picture'), 'classes':('collapse',), }) ) class BookAdmin(admin.ModelAdmin): #指定时间选择器 date_hierarchy = "publicate_date" class PublisherAdmin(admin.ModelAdmin): list_display = ('name','address','city','website') list_editable = ('address','city') list_filter = ('address','city') search_fields = ('name','website') fieldsets = ( ('基本选项',{ 'fields':('name','address','city'), }), ( '高级选项',{ 'fields':('country','website'), 'classes':('collapse',) } ) ) # Register your models here. # 注册高级管理类 admin.site.register(Author,AuthorAdmin) admin.site.register(Publisher,PublisherAdmin) admin.site.register(Book,BookAdmin) # 注册普通管理类 admin.site.register(Wife) 关系映射: 一对一的关系映射 语法: 在关联的连个类的任何一个中增加 属性 = models.OneToOneField(Entry) class Author(models.Model): .... class Wife(models.Model); .... # 增加对Author的一对一引用 author = models.OneToOneField(Author) # 在数据库中生成一个外键列在wife表中 要引用自author 表中的主键 # 在Author模型中也会增加一个隐式属性叫wife #引用Author,实现一对一映射 author = models.OneToOneField(Author,verbose_name='相公') 查询: 正向查询: 直接通过关联属性就能获取到关联数据 通过wife找author wife = Wife.objects.get(id=1) author = wife.author 反向查询: 通过反向引用属性查询 通过author找wife author = Author.objects.get(id=1) # 反向引用的属性就是模型类的全小写 wife = author.wife #正向查询 wife = Wife.objects.get(id=1) wife_author = wife.author #反向查询 author = Author.objects.get(id=1) author_wife = author.wife return render(request,'14-oto.html',locals()) 一对多关系映射: 语法: 在"多"的模型中对"一"的模型引用 属性 = models.ForeignKey(Entry) class Publisher(models.Model): .... class Book(models.Model): .... publisher = modelsForeignKey(Publisher) #增加对Publisher的引用(1:M) publisher = models.ForeignKey(Publisher,null=True) 查询: 正向查询: book = Book.objects.get(id=1) publisher = book.publisher 反向查询: django 会默认在publisher中增加book_set属性 来表示对应的所有书籍的查询对象 publisher = Publisher.objects.get(id=1) publisher = publisher.book_set.all() def otm_views(request): # 正向查询:通过Book查询Publisher,在15-otm.html中显示每个book对应的publisher books = Book.objects.all() # 反向查询 pub = Publisher.objects.get(id=1) pub_books = pub.book_set.all() return render(request,'15-otm.html',locals()) 多对多关系映射: 语法: 在关联地 任意一个类中都可以增加 属性 = models.ManyToManyField(Entry) class Author(models.Model): .... class Book(models.Model): .... authors = models.ManyToManyField(Author) #增加对Author的引用(M:N) authors = models.ManyToManyField(Author) 查询: 正向查询; 通过Book查询Author authors 属性只是提供了关联表的查询引用 还需要使用all() values()等方法来获取真实的数据 def mtm_views(request): #正向查询:通过 book 查询 authors book = Book.objects.get(id=1) authors = book.authors.all() #反向查询:通过 author 查询 book author = Author.objects.get(id=2) books = author.book_set.all() return render(request,'16-mtm.html',locals())

优秀的个人博客,低调大师

ABAP,Java, nodejs和go语言的web server编程

ABAP and Java see my blog). nodejs 用nodejs现成的express module,几行代码就能写个server出来: var express = require('express'); var routesEngine = require('./jerryapp/routes/index.js'); // index.js actually http://www.ruanyifeng.com/blog/2015/05/require.html var app = express(); app.use('/ui5', express.static(process.cwd() + '/webapp')); app.use('/v', express.static(process.cwd() + '/vue')); app.use('/map', express.static(process.cwd() + '/map')); app.use('/tile', express.static(process.cwd() + '/tileStudy')); app.use('/a2', express.static(process.cwd() + '/a2')); routesEngine(app); app.listen(process.env.PORT || 3000, function () { console.log('Listening on port, process.cwd(): ' + process.cwd() ); }); go 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

优秀的个人博客,低调大师

Python全栈 Web(JavaScript 数组、string、正则、Math、Date)

数组: 常用的API: toString() 将数组转换为字符串 默认是将数组的元素 使用逗号隔开 链接成字符串在进行返回 join(seperator) 将数组的元素使用seperator字符串作为分隔符 链接成字符串再进行返回 reverse() 将数组进行反转 该函数会改变现有数组的结构 不需要接受返回值 sort() 对数组的元素进行排序 默认按照Unicode码进行排序 对数字不准确 会改变原有数组的内容 特点: 允许自定义的排序规则(排序函数)用来指定数组的排序方式 语法: arr.sort(排序函数); 排序函数: 升序的排序函数: function sortAsc(a, b){ return a - b; } arr.sort(sortAsc); 匿名函数实现: arr.sort(function(a, b){ return a - b; }) 降序排序: 排序后

优秀的个人博客,低调大师

Python全栈 Web(文本属性、表格属性、布局)

文本相关属性 字体属性: 1.设置字体大小 属性:font-size 取值:px 2.指定字体名称 属性:font-family 取值:字体名称,如果出现多个名称,使用,隔开 如果字体名称出现中文或出现中文空格要用引号引起来 3.设置字体的加粗 属性:font-weight 取值: 单词表示 normal 默认值 正常显示 bold 加粗显示 lighter 极细文本 数字显示 100~900之间 整百数值 值越大越粗 400 等于 normal 700 等于 bold 4.设置字体样式: 属性:font-style 取值: normal 正常显示 italic 使用斜体显示 oblique 使文本倾斜达到斜体效果 5.字体属性简写: 属性:font 取值:style weight size family family属性值必须写 不写所有设置无效 文本属性: 1.文本颜色 属性:color 取值:颜色值 2.文本水平对齐方式: 属性:text-align 取值:left(默认值) center right justify(两端对齐) 3.设置行高 属性:line-height 取值:像素 或无单位数值表示当前文本大小的倍数 行高常用于设置文本的垂直居中 将元素的高度与行度保持一致 一行文本 在当前行中一定是垂直居中的 上下的空隙由浏览器自动分配 4.文本装饰线 属性:text-decoration 取值: underline 下划线 overline 上划线 line-through删除线 none:针对超链接取消下划线 表格属性: 基础样式属性是通用的 width height background color margin padding 独有CSS属性: 边框合并: border-collapse 取值: separate(默认分离) collapse(边框合并) td不支持外边距 边框合并只能写在table标签里 边框的边距: 设置单元格之间的距离 属性: border-spacing 取值: h-Value 水平方向的距离 v-Value 垂直方向的距离 两个值用空格隔开 只能在表格边框分离的状态下使用 过渡效果: 过度效果指的是元素CSS属性值在发生变化时的一种平滑效果 语法: 过度属性: 属性:transition-property 作用:用来指定哪些CSS属性需要添加过度效果 取值: 指定单个的属性名称增加一个过度效果 例如:width 指定多个属性用,隔开 all: 将所有能添加过渡效果的都进行添加 能够添加过渡效果的属性: 所有颜色相关的属性 所有数值取值为数字的属性 过渡时长: 属性:transition-duration 作用:表示多长时间内完成过渡效果 取值: 单位为s(秒)或者是ms(h毫秒)的数值 速度时间曲率: 属性:transition-timing-function 作用:设置过渡效果的变化速率 取值: ease(默认) 慢速开始 中间变快 慢速结束 linear 匀速变化 ease-in 慢速开始 加速结束 ease-out 快速开始 减速结束 ease-in-out 慢速开始和结束 中间先加速后减速 过渡延迟: 属性:transition-delay 作用:延迟指定时长后再发生过渡效果 取值: 单位为s(秒)或者是ms(h毫秒)的数值 使用注意: 过渡时长必须设置,其他可以省略 否则没有过渡效果 使用过渡相关的属性,要定义在元素默认样式中 不能写在伪类选择器中,会影响效果 属性简写: 属性:transition 取值: property、duration timing-function 、delay duration必须写 布局: 设置元素在网页中的排列方式和位置 分类: 普通流布局/标准流布局/文档流布局 网页中默认布局方式 特点: 将元素按照书写顺序和类型从左向右 从上到下排列 浮动布局: 属性:float left、right、none(默认) left: 元素向左浮动 停靠在其他元素的边缘 right: 元素向右浮动 停靠在其他元素的边缘 特点: 1.元素在设置浮动元素后会脱离文档流 元素在文档中不占位 呈现一种浮动元素飘浮在文档上方的效果 2.浮动元素后面的正常元素会上移占据原本浮动元素所在的位置 3.多个元素左浮或右浮动,浮动元素会依次停靠在前一个元素的边缘位置 第一个浮动元素会贴着负元素的边框显示 4.如果父元素中无法并排显示浮动元素会自动换行 5.浮动元素在文档中不占位 6.所有类型的元素只要设置浮动就可以设置宽高 行内或行内快元素浮动后 水平方向之间没有空隙 浮动元素的特殊效果: 文字环绕效果 浮动元素会遮挡后面正常元素 但是不会遮挡正常元素的内容的显示 内容会自动围绕在浮动元素的周围显示 浮动元素对父元素高度影响: 由于浮动元素在文档中不占位 一旦子元素全部浮动 父元素的高度会成0 影响背景的显示,和后面其他元素的布局 解决方式: 1.指定父元素的高度 但是不能准确确认父元素的高度 2.父元素中设置:overflow:hidden 如果父元素要显示溢出的内容,设置overflow:hidden之后 溢出的内容就不显示了 3.清除浮动: 由于浮动元素会对其后的正常元素带来一些影响 所以在网页布局中要清除这种影响 属性:clear 取值: none (默认)不做处理 left 清除当前元素前面左浮元素带来的影响 right 正常元素右边不允许出现浮动元素 both 正常元素两边都不能出现浮动元素 在父元素的末尾添加空的块级元素 设置空块级元素 clear:both;

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册