引用自:https://blog.csdn.net/weixin_42950386/article/details/83143293

定义模型类

模型类被定义在"应用/models.py"文件中,此例中为"booktest/models.py"文件。
模型类必须继承自Model类,位于包django.db.models中。
提示:对于重要数据使用逻辑删除。

示例演示

接下来首先以"图书-英雄"管理为例进行演示。
注意:这里我们用的版本是django==1.8.2版本。
了解和2.1版本的区别,请百度查询,这里不再啰嗦。

1.下载pymysql

  1. pip install pymysql

设置test2/__init__.py文件

  1. import pymysql
  2. pymysql.install_as_MySQLdb()

配置数据库在settings.py中:

  1. DATABASES = {
  2. 'default': {
  3. # 'ENGINE': 'django.db.backends.sqlite3',
  4. 'ENGINE': 'django.db.backends.mysql',
  5. # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  6. 'NAME': 'test2',
  7. 'USER': 'root',
  8. 'PASSWORD': 'mysql',
  9. 'PORT': 3306,
  10. 'HOST': 'localhost',
  11. }
  12. }

2.打开booktest/models.py文件,定义模型类如下

  1. from django.db import models
  2. # from datetime import date
  3. # Create your models here.
  4.  
  5. class BookInfo(models.Model):
  6. """图书模型类"""
  7. # 书名
  8. btitle = models.CharField(max_length=40)
  9. # 出版日期
  10. bpub_date = models.DateField(default='1970-01-01')
  11. # 阅读量
  12. bread = models.IntegerField(default=0)
  13. # 点赞量
  14. bgood = models.IntegerField(default=0)
  15. # 删除
  16. is_del = models.BooleanField(default=False)
  17.  
  18. class HeroInfo(models.Model):
  19. """英雄模型类"""
  20. # 英雄名称
  21. hname = models.CharField(max_length=20)
  22. # 性别
  23. hgender = models.BooleanField(default=False) # False为男
  24. # 年龄
  25. hage = models.IntegerField(default=18)
  26. # 功夫
  27. hcomment = models.CharField(max_length=128)
  28. # 关联
  29. hbook = models.ForeignKey("BookInfo")
  30. # 删除
  31. isDelete = models.BooleanField(default=False)

3.迁移

生成迁移文件。

创建数据库

python manage.py makemigrations

报错

解决方案:

看一下settings.py文件 apps中有没有添加 booktest

然后执行如下命令。

python manage.py makemigrations
python manage.py migrate
迁移

打开数据库的命令行,查看当前所有表如下图:

迁移

表bookinfo结构如:

默认值并不在数据库层面生效,而是在django创建对象时生效。

图书表结构

表booktest_heroinfo结构如下:

Django框架会根据关系属性生成一个关系字段,并创建外键约束。

英雄表结构

测试数据
在数据库命令行中,复制如下语句执行,向booktest_bookinfo表中插入测试数据:

  1. insert into booktest_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values
  2. ('射雕英雄传','1980-5-1',12,34,0),
  3. ('天龙八部','1986-7-24',36,40,0),
  4. ('笑傲江湖','1995-12-24',20,80,0),
  5. ('雪山飞狐','1987-11-11',58,24,0);

再复制如下语句执行,向booktest_heroinfo表中插入测试数据:

  1. insert into booktest_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values
  2. ('郭靖',1,1,'降龙十八掌',0),
  3. ('黄蓉',0,1,'打狗棍法',0),
  4. ('黄药师',1,1,'弹指神通',0),
  5. ('欧阳锋',1,1,'蛤蟆功',0),
  6. ('梅超风',0,1,'九阴白骨爪',0),
  7. ('乔峰',1,2,'降龙十八掌',0),
  8. ('段誉',1,2,'六脉神剑',0),
  9. ('虚竹',1,2,'天山六阳掌',0),
  10. ('王语嫣',0,2,'神仙姐姐',0),
  11. ('令狐冲',1,3,'独孤九剑',0),
  12. ('任盈盈',0,3,'弹琴',0),
  13. ('岳不群',1,3,'华山剑法',0),
  14. ('东方不败',0,3,'葵花宝典',0),
  15. ('胡斐',1,4,'胡家刀法',0),
  16. ('苗若兰',0,4,'黄衣',0),
  17. ('程灵素',0,4,'医术',0),
  18. ('袁紫衣',0,4,'六合拳',0);

4,后台管理

打开test1/settings.py文件,找到语言编码、时区的设置项,将内容改为如下

  1. LANGUAGE_CODE = 'zh-hans' #使用中国语言
  2. TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间

admin.py文件中:

  1. from django.contrib import admin
  2. from booktest.models import *
  3. # Register your models here.
  4.  
  5. # 关联对象
  6. # 1.以块的形式嵌入
  7. # 创建StackedInline类
  8. class BookStackedInline(admin.StackedInline):
  9. # 写多类的名字
  10. model = HeroInfo
  11. # 额外设置编辑子对象 默认为3个
  12. extra = 2 # 额外编辑两个对象
  13.  
  14. # 2.以表格的形式嵌入
  15. class BookTabularInline(admin.TabularInline):
  16. # 写多类的名字
  17. model = HeroInfo
  18. # 额外设置编辑子对象 默认为3个
  19. extra = 2 # 额外编辑两个对象
  20.  
  21. class BookInfoAdmin(admin.ModelAdmin):
  22. # 每页显示多少条数据
  23. list_per_page = 10
  24. # 顶部显示的属性,设置为True在顶部显示,设置为False不在顶部显示,默认为True
  25. actions_on_top = True
  26. # 底部显示的属性,设置为True在底部显示,设置为False不在底部显示,默认为False
  27. actions_on_bottom = True
  28. # 自定义显示字段
  29. # list_display = [模型字段1,模型字段2....] 模型字段可以是BookInfo里面设置的属性名 也可以是方法名
  30. list_display = ['id', 'btitle', 'bpub_date', 'title']
  31. # 方法列排序 在models.py文件
  32. # 右侧栏过滤器
  33. list_filter=['btitle'] # 以btitle 过滤
  34. # 搜索框
  35. search_fields = ['btitle'] # 以btitle字段搜索
  36. # 关联BookStackedInline类 块类
  37. # inlines = [BookStackedInline]
  38. # 关联BookTabularInline类
  39. inlines = [BookTabularInline]
  40.  
  41. class HeroInfoAdmin(admin.ModelAdmin):
  42. list_display = ['id', 'hname', 'hcomment']
  43.  
  44. class AreaInfoAdmin(admin.ModelAdmin):
  45. list_display = ['id', 'atitle', 'parent']
  46. # 编辑页
  47. # 添加/修改页面字段顺序
  48. # fields = ['aParent', 'atitle']
  49. # 分组显示 fieldsets=() 后面跟元祖
  50. # 与fields=[] 不能同时使用
  51. fieldsets = (
  52. ('基本', {'fields':['aParent']}),
  53. ('高级', {'fields':['atitle']})
  54. )
  55.  
  56. # 注册
  57. admin.site.register(BookInfo, BookInfoAdmin)
  58. admin.site.register(HeroInfo, HeroInfoAdmin)
  59. admin.site.register(AreaInfo, AreaInfoAdmin)

models.py文件中各种方法

  1. from django.db import models
  2. from datetime import date
  3. # Create your models here.
  4. # 建立一个Manager类
  5. class InfoManager(models.Manager):
  6. """管理器类"""
  7. # 改变查询的结果
  8. def all(self):
  9. # 1.调用父类结果
  10. result = super().all()
  11. # 改变结果
  12. return result.filter(isDelete=False)
  13.  
  14. def create_book(self, btitle, bpub_date):
  15. # 获取模型所在的模型类
  16. model_class = self.model
  17. # 创建对象
  18. book = model_class()
  19. book.btitle = btitle
  20. book.bpub_date = bpub_date
  21. book.save()
  22. return book
  23.  
  24. class BookInfo(models.Model):
  25. """图书模型类"""
  26. # 书名
  27. # btitle = models.CharField(max_length=20,verbose_name='书名') # verbose_name= 给列标题改名
  28. btitle = models.CharField('书名',max_length=20) # 也可以第一个参数放中文标题 不用加verbose_name=
  29. # 出版时间
  30. bpub_date = models.DateField()
  31. # 阅读量
  32. bread = models.IntegerField(default=0)
  33. # 评论数
  34. bcomment = models.IntegerField(default=0)
  35. # 是否删除
  36. isDelete = models.BooleanField(default=False)
  37. # 建立manager对象
  38. objects = InfoManager()
  39.  
  40. # 将方法做列
  41. def title(self):
  42. return self.btitle
  43. # 方法列排序
  44. title.admin_order_field='btitle'
  45. # 方法列标题改名
  46. title.short_description = '书名(方法列)'
  47.  
  48. class HeroInfo(models.Model):
  49. """英雄模型类"""
  50. # 名字
  51. hname = models.CharField(max_length=20)
  52. # 性别
  53. hgender = models.BooleanField(default=False)
  54. # 功夫
  55. hcomment = models.CharField(max_length=128)
  56. # 书名
  57. hbook = models.ForeignKey('BookInfo')
  58. # 是否删除
  59. isDelete = models.BooleanField(default=False)
  60.  
  61. class AreaInfo(models.Model):
  62. """地区模型类"""
  63. # 地区名
  64. atitle = models.CharField(max_length=20)
  65. # 关系属性 代表当前地区父类地区
  66. aParent = models.ForeignKey('self', null=True, blank=True)
  67.  
  68. def __str__(self):
  69. return self.atitle
  70.  
  71. # 封装方法 访问关联对象成员
  72. def parent(self):
  73. if self.aParent is None:
  74. return ''
  75. else:
  76. return self.aParent.atitle
  77.  
  78. parent.short_description = '父级区域名称'

重写模板

1)在templates/目录下创建admin目录,结构如下图:

2)打开当前虚拟环境中Django的目录,再向下找到admin的模板,目录如下:

  1. /home/python/.virtualenvs/py_django/lib/python3.5/site-packages/django/contrib/admin/templates/admin

编辑base_site.html文件:

  1. {% extends "admin/base.html" %}
  2.  
  3. {% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
  4.  
  5. {% block branding %}
  6. <h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
  7. <hr>
  8. <h1>自定义的管理页模板</h1>
  9. <hr>
  10. {% endblock %}
  11.  
  12. {% block nav-global %}{% endblock %}

创建管理员

终端中命令如下:

  1. python manage.py createsuperuser

根据提示输入管理员、邮箱、密码

启动服务器

  1. python manage.py runserver

打开浏览器,在地址栏中输入如下地址后回车

  1. http://127.0.0.1:8000/admin/

输入建立的管理员和密码登录

4.定义视图
打开booktest/views.py文件,定义视图代码如下:

  1. from django.shortcuts import render, redirect # redircet重定向
  2. from booktest.models import *
  3. from datetime import date
  4. from django.http import HttpRequest, HttpResponse
  5. # Create your views here.
  6. def index(request):
  7.  
  8. # 查看所有书
  9. list = BookInfo.objects.all()
  10. return render(request, 'booktest/index.html', {'list': list})
  11.  
  12. def create(request):
  13.  
  14. b = BookInfo()
  15. b.btitle = '流星蝴蝶剑'
  16. b.bpub_date = date(1989,2,1)
  17. b.save()
  18. return redirect(index) # 跳转回首页
  19.  
  20. def delete(request, bid):
  21.  
  22. b = BookInfo.objects.get(id=bid)
  23. b.delete()
  24. return redirect(index)
  25.  
  26. def books(request, bid):
  27. b = BookInfo.objects.get(id=bid)
  28. list = b.heroinfo_set.all()
  29.  
  30. return render(request, 'booktest/detail.html', {'list':list,'book':b})

5.配置url
打开test2/urls.py文件,配置url如下:

  1. from django.conf.urls import include, url
  2. from django.contrib import admin
  3.  
  4. urlpatterns = [
  5. url(r'^admin/', include(admin.site.urls)),
  6. # 引入booktest的url配置
  7. url(r'^', include('booktest.urls')), # booktest.urls要加引号,不然找不到文件 ?
  8. ]

在booktest应用下创建urls.py文件,代码如下:

  1. from django.conf.urls import include, url
  2. from django.contrib import admin
  3. from booktest import views
  4.  
  5. urlpatterns = [
  6. url(r'^index$', views.index),
  7. url(r'^create$', views.create),
  8. # 传值用() 扩起来 如:(\d+)
  9. url(r'^delete/(\d+)$', views.delete),
  10. url(r'^books/(\d+)$', views.books),
  11. ]

6.创建模板
打开test2/settings.py文件,配置模板查找目录TEMPLATES的DIRS。

‘DIRS’: [os.path.join(BASE_DIR,‘templates’)],

  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [os.path.join(BASE_DIR,'templates')],
  5. 'APP_DIRS': True,
  6. 'OPTIONS': {
  7. 'context_processors': [
  8. 'django.template.context_processors.debug',
  9. 'django.template.context_processors.request',
  10. 'django.contrib.auth.context_processors.auth',
  11. 'django.contrib.messages.context_processors.messages',
  12. ],
  13. },
  14. },
  15. ]

模板目录

创建templates/booktest/index.html文件。

模板文件

渲染模板index.html:

  1. <a href="/create">新增</a>
  2. <ul>
  3. {% for book in list %}
  4. <li><a href="/books/{{ book.id }}">{{ book.btitle }}</a> --- <a href="/delete/{{ book.id }}">删除</a></li>
  5. {% endfor %}
  6. </ul>

7.运行 运行服务器。
python manage.py runserver (主机名 端口号) 括号里可以省去
在浏览器中查看。

首页

操作效果如下图。

运行

在mysql命令行中查看数据表变化如下图:

数据变化

 静态文件配置

在settings.py文件中定义静态文件存放的物理目录

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

在项目根目录下创建static目录,再创建img、css、js目录

ajax登录提示403

这是csrf机制导致的 打开settings.py

  1. MIDDLEWARE_CLASSES = (
  2. 'django.contrib.sessions.middleware.SessionMiddleware',
  3. 'django.middleware.common.CommonMiddleware',
  4. # 'django.middleware.csrf.CsrfViewMiddleware', # 把这行注释了就可以了
  5. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  6. 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  7. 'django.contrib.messages.middleware.MessageMiddleware',
  8. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  9. 'django.middleware.security.SecurityMiddleware',
  10. )

 模板继承

  1. 继承格式:{% extends 父模板文件路径%}
    例:
    {% extends 'layout/header.html' %}
  2. {% block 块名 %}
  3. {{ block.super}} #获取父模板中块的默认内容
  4. 重写的内容
  5. {% endblock 块名%}

html转义

  1. 要关闭模板上下文字符串的转义:
  2. 可以使用 {{ 模板变量|safe}}
  3. 也可以使用:
  4. {% autoescape off %}
  5. 模板语言代码
  6. {% endautoescape %}
  7. 模板硬编码中的字符串默认不会经过转义,如果需要转义,那需要手动进行转义

验证码

1)安装包

  1. pip install Pillow==3.4.1

2)在booktest/views.py文件中,创建视图verify_code

  1. from PIL import Image, ImageDraw, ImageFont
  2. from django.utils.six import BytesIO
  3. ...
  4. def verify_code(request):
  5. #引入随机函数模块
  6. import random
  7. #定义变量,用于画面的背景色、宽、高
  8. bgcolor = (random.randrange(20, 100), random.randrange(
  9. 20, 100), 255)
  10. width = 100
  11. height = 25
  12. #创建画面对象
  13. im = Image.new('RGB', (width, height), bgcolor)
  14. #创建画笔对象
  15. draw = ImageDraw.Draw(im)
  16. #调用画笔的point()函数绘制噪点
  17. for i in range(0, 100):
  18. xy = (random.randrange(0, width), random.randrange(0, height))
  19. fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
  20. draw.point(xy, fill=fill)
  21. #定义验证码的备选值
  22. str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
  23. #随机选取4个值作为验证码
  24. rand_str = ''
  25. for i in range(0, 4):
  26. rand_str += str1[random.randrange(0, len(str1))]
  27. #构造字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont”
  28. font = ImageFont.truetype('FreeMono.ttf', 23)
  29. #构造字体颜色
  30. fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
  31. #绘制4个字
  32. draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
  33. draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
  34. draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
  35. draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
  36. #释放画笔
  37. del draw
  38. #存入session,用于做进一步验证
  39. request.session['verifycode'] = rand_str
  40. #内存文件操作
  41. buf = BytesIO()
  42. #将图片保存在内存中,文件类型为png
  43. im.save(buf, 'png')
  44. #将内存中的图片数据返回给客户端,MIME类型为图片png
  45. return HttpResponse(buf.getvalue(), 'image/png')

3)打开booktest/urls.py文件,配置url

  1. url(r'^verify_code/$', views.verify_code),

调用验证码

1)在booktest/views.py文件中,创建视图verify_show。

  1. def verify_show(request):
  2. return render(request,'booktest/verify_show.html')

2)打开booktest/urls.py文件,配置url。

  1. url(r'^verify_show/$', views.verify_show),

3)在templates/booktest/目录下创建verify_show.html。

  1. <html>
  2. <head>
  3. <title>验证码</title>
  4. </head>
  5. <body>
  6. <form method="post" action="/verify_yz/">
  7. {%csrf_token%}
  8. <input type="text" name="yzm">
  9. <img id="yzm" src="/verify_code/"/>
  10. <span id="change">看不清,换一个</span>
  11. <br>
  12. <input type="submit" value="提交">
  13. </form>
  14. </body>
  15. </html>

验证

1)在booktest/views.py文件中,创建视图verify_yz

  1. def verify_yz(request):
  2. yzm=request.POST.get('yzm')
  3. verifycode=request.session['verifycode']
  4. response=HttpResponse('no')
  5. if yzm==verifycode:
  6. response=HttpResponse('ok')
  7. return response

2)打开booktest/urls.py文件,配置url。

  1. url(r'^verify_yz/$', views.verify_yz),

反向解析

当某一个url配置的地址发生变化时,页面上使用反向解析生成地址的位置不需要发生变化。

根据url 正则表达式的配置动态的生成url

在项目urls中包含具体应用的urls文件时指定namespace;

在应用的urls中配置是指定name;

在模板文件中使用时,格式如下:

{% url 'namespace名字:name' %} 例如{% url 'booktest:fan2'%}

带位置参数:

{% url 'namespace名字:name' 参数 %} 例如{% url 'booktest:fan2' 1%}

带关键字参数:

{% url 'namespace名字:name' 关键字参数 %} 例如{% url 'booktest:fan2' id=1 %}

在重定向的时候使用反向解析:

from django.core.urlresolvers import reverse

无参数:

reverse('namespace名字:name名字')

如果有位置参数

reverse('namespace名字:name名字', args = 位置参数元组)

如果有关键字参数

reverse('namespace名字:name名字', kwargs=字典)

 中间件

1) 新建middleware.py文件。

2) 定义中间件类。

在类中定义中间件预留函数。

__init__:服务器响应第一个请求的时候调用。

process_request:是在产生request对象,进行url匹配之前调用。

process_view:是url匹配之后,调用视图函数之前。

process_response:视图函数调用之后,内容返回给浏览器之前。

process_exception:视图函数出现异常,会调用这个函数。

如果注册的多个中间件类中包含process_exception函数的时候,调用的顺序跟注册的顺序是相反的。

3) 注册中间件类。

 图片上传

Django示例演示--?的更多相关文章

  1. 转数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  2. 数据库分库分表(sharding)系列(一)拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  3. 据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  4. dorado 的学习位置、控件使用方法查找、示例演示地址

    dorado的学习位置: http://wiki.bsdn.org/display/dorado7/Project+Home dorado的控件使用方法查找: http://dorado7.bsdn. ...

  5. java 工厂模式的作用,为什么要用工厂模式以及示例演示

    1 工厂模式的作用,为什么要用工厂模式? 工厂模式是为了解耦:把对象的创建和使用的过程分开.就是Class A 想调用Class B,那么只是调用B的方法,而至于B的实例化,就交给工厂类. 工厂模式可 ...

  6. Python正则表达式的简单应用和示例演示

    前一阵子小编给大家连续分享了十篇关于Python正则表达式基础的文章,感兴趣的小伙伴可以点击链接进去查看.今天小编给大家分享的是Python正则表达式的简单应用和示例演示,将前面学习的Python正则 ...

  7. DB 分库分表(1):拆分实施策略和示例演示

    DB 分库分表(1):拆分实施策略和示例演示 第一部分:实施策略 1.准备阶段 对数据库进行分库分表(Sharding化)前,需要开发人员充分了解系统业务逻辑和数据库schema.一个好的建议是绘制一 ...

  8. SQL Server时间粒度系列----第9节时间粒度示例演示

    本文目录列表: 1.准备测试数据 2.向测试数据表添加相关时间粒度字段列 3.基于日月季年统计汇总的演示 4.总结语 5.参考清单列表   准备测试数据   为了提供不同时间粒度示例的演示,就需要测试 ...

  9. Erlang基础 -- 介绍 -- Wordcount示例演示

    在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问 ...

随机推荐

  1. sql查询出现1055 this is incompatible with sql_mode=only_full_group_by

    今天在测试服务器上突然出现了这么一个MySQL的问题,同样的代码正式服没有问题,那肯定就是出在了配置上,查了一下原因才明白原来是数据库版本为5.7以上的版本, 默认是开启了 only_full_gro ...

  2. Ubuntu遇到apt-get update报错:"E: Could not get lock /var/lib/apt/lists/lock"

    sudo apt-get update报错:"E: Could not get lock /var/lib/apt/lists/lock" 出现此问题的原因可能是有另外一个程序在运 ...

  3. Markdown新手入门

    目录 Markdown新手入门 一.字体样式 二. 标题 三.列表 四.引用和代码块 五.插入图片和超链接 六.创建表格 七. 上标和下标 八.着重显示和高亮显示 我是尾巴 Markdown新手入门 ...

  4. idea常用插件安装

    1.IDEA Restart IDEA没有重启的选项,这个工具就是来弥补这个功能,可以在File-->Restart 重启,也可以使用快捷键  CTRL + ALT + R 2.Maven He ...

  5. vue 项目中assets 和static的区别

    一.Webpacked Assets 为了回答这个问题,我们首先需要了解Webpack如何处理静态资产.在 *.vue 组件中,所有模板和CSS都会被 vue-html-loader 及 css-lo ...

  6. 解决Windows10关闭UAC后,开机启动项不生效的问题

    Windows10关闭UAC后,会发现启动项不生效. 运行输入gpedit.msc打开组策略(家庭版没有组策略功能) 依次展开计算机配置->Windows设置->安全设置->本地策略 ...

  7. java之struts2之数据检验

    1.使用struts2时,有时候需要对数据进行相关的验证.如果对数据的要求比较严格,或对安全性要求比较高时,前端 js 验证还不够, 需要在后端再进行一次验证,保证数据的安全性. 2.struts2提 ...

  8. java后台获取微信小程序openid

    一.jar包准备 1.在网盘下载 链接:https://pan.baidu.com/s/15HAAWOg_yn768g4s9IrcPg 提取码:hgj0 二.在pom文件中添加依赖 1.将外部的引入的 ...

  9. 使用gdb调试应用程序

    目录 一.gdb基本使用 1. 启动gdb 2. gdb交互式命令 一.gdb基本使用 ​ GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. ...

  10. [极客-Linux] 05 系统调用

    分配内存的系统调用 1)brk  小内存 2)mmap  大内存 sigaction 注册信号处理函数 进程间通信: 1)消息队列,在内核中,msgget 创建 2)共享内存,shmget 内核源代码 ...