组件:

​ 把一小段HTML 放在一个HTML中 nav.html

​ 使用:

​ {% include ‘nav.html ’ %}

一. FBV 和CBV

  1.FBV(function base views)

    就是在视图里使用函数处理请求

    (之前都是FBV模式)

  2.CBV(class base views)

    就是在视图里使用类处理请求

    ①基本形式

  1. # urls.py 文件中
  2. from django.conf.urls import url
  3. from app01 import views #引入我们在views.py里面创建的类
  4.  
  5. urlpatterns = [
  6. url(r'^index/$', views.MyView.as_view()),
  7. ]
  8.  
  9. #view.py 文件中

  from django.http import HttpResponse
  from django.views import View

  class MyView(View):

    def get(self, request):    #如果请求方式为 GET 方式
      return HttpResponse('OK')

  1.  

  ② CBV传参

  1. #url中的写法
  2.  
  3. url(r'^cv/(\d{2})/', views.Myd.as_view(),name='cv'),
  4. url(r'^cv/(?P<n>\d{2})/', views.Myd.as_view(name='xxx'),name='cv'),#如果想给类的name属性赋值,前提你的Myd类里面必须有name属性(类属性,定义init方法来接受属性行不通,但是可以自行研究一下,看看如何行通,意义不大),并且之前类里面的name属性的值会被覆盖掉
  5.  
  6. #view.py 中的写法

  class Myd(View):
    name = 'xxx'

    def get(self,request,n):
      print('get方法执行了')
      print('>>>',n)
      return render(request,'cvpost.html',{'name':self.name})

  1.  

    def post(self,request,n):
      print('post方法被执行了')
      return HttpResponse('post')

  1.  

  ③添加类属性

  1) 第一种是常见的python的方法

  1. from django.http import HttpResponse
  2. from django.views import View
  3.  
  4. class GreetingView(View):
  5. name = "yuan"
  6. def get(self, request):
  7. return HttpResponse(self.name)
  8.  
  9. # You can override that in a subclass
  10.  
  11. class MorningGreetingView(GreetingView):
  12. name= "alex"

  2)第二种是 在url中设置的属性python

  1. urlpatterns = [
  2. url(r'^index/$', GreetingView.as_view(name="egon")), #类里面必须有name属性,并且会被传进来的这个属性值给覆盖掉
  3. ]

二. 给视图加装饰器

  1.FBV使用装饰器

  1. def wrapper(func):
  2. def inner(*args, **kwargs):
  3. start_time = time.time()
  4. ret = func(*args, **kwargs)
  5. end_time = time.time()
  6. print("used:", end_time-start_time)
  7. return ret
  8. return inner
  9.  
  10. # FBV版添加班级
  11. @wrapper
  12. def add_class(request):
  13. if request.method == "POST":
  14. class_name = request.POST.get("class_name")
  15. models.Classes.objects.create(name=class_name)
  16. return redirect("/class_list/")
  17. return render(request, "add_class.html")

  2.CBV使用装饰器

  ①

  1. from django.views import View
  2. from django.utils.decorators import method_decorator #引入模块

 def wrapper(fn):   #装饰器框架

  Def inner(*args,**kwargs):

    print(‘Before’)

  1.    ret=fn(*args,**kwargs) # 函数前后可添加装饰
  1.    Print(‘after’)
  1.    Return ret
  1.  Return inner
  1.  

  # @method_decorator(wrapper,name=’get’)  指定请求方式添加装饰器

  class AddClass(View):

  1. @method_decorator(wrapper) # 直接在开头添加装饰器
  2. def get(self, request):
  3. return render(request, "add_class.html")
  4. def post(self, request):
  5. class_name = request.POST.get("class_name")
  6. models.Classes.objects.create(name=class_name)
  7. return redirect("/class_list/")

  ②

  1. from django.shortcuts import render,redirect,HttpResponse
  2. from django.urls import reverse
  3. from django.utils.decorators import method_decorator
  4. from django.views import View
  5. def wrapper(fn):
  6. def inner(request,*args,**kwargs):
  7. print('xxxxx')
  8. ret = fn(request)
  9. print('xsssss')
  10. return ret
  11. return inner
  12.  
  13. # @method_decorator(wrapper,name='get')#CBV版装饰器方式一
  14. class BookList(View):
  15. @method_decorator(wrapper) #CBV版装饰器方式二
  16. def dispatch(self, request, *args, **kwargs):
  17. print('请求内容处理开始')
  18. res = super().dispatch(request, *args, **kwargs) #进行 get 或 post 分配
  19. print('处理结束')
  20. return res
  21. def get(self,request):
  22. print('get内容')
  23. # all_books = models.Book.objects.all()
  24. return render(request,'login.html')
  25. @method_decorator(wrapper) #CBV版装饰器方式三
  26. def post(self,request):
  27. print('post内容')
  28. return redirect(reverse('book_list'))
  29. # @wrapper
  30. def book_list(request):
  31.  
  32. return HttpResponse('aaa')

  3.csrf_exempt,csrf_protect

三. ORM 对象关系映射

  类   ------   表

  类对象   ------   记录

  类属性   ------   字段

四.  连接数据库配置

  1.在  setting.py 文件中重新设置  DATABASES

  ① 删除原有的 sqlite3配置的 DATABASES

  1. #sqlite3的配置
  2. # DATABASES = {
  3. # 'default': {
  4. # 'ENGINE': 'django.db.backends.sqlite3',
  5. # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  6. # }
  7. # }

  注: sqlite3 是django 自带的数据库  功能较mysql 差

  ② 添加连接  mysql 配置的  DATABASES

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME':'orm1', # 要连接的数据库,连接前需要创建好
  5. 'USER':'root', # 连接数据库的用户名
  6. 'PASSWORD':'222', # 连接数据库的密码
  7. 'HOST':'127.0.0.1', # 连接主机,默认本级
  8. 'PORT':3306 # 端口 默认3306
  9. }
  10. }

  2.在项目中   init.py  文件里面写上

  1. import pymysql
  2. pymysql.install_as_MySQLdb()

  3.添加 app 应用是 在setting 文件中 进行注册

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'app01.apps.App01Config', #方式1
  9. 'app02', #方式2
  10.  
  11. ]

  4.数据库每次修改要执行命令(在terminal 执行)

  1. Python manage.py makemigrations (在 migrations 文件中进行记录)
  2.  
  3. Python manage.py migrate (创建表)

五.创建表的操作  (在django中不能创建库)

  1.基本方式(在应用里的  models.py 文件中创建表 ,字段)

  示例

  1. class Book(models.Model):
  2.  
  3. id = models.AutoField(primary_key=True) #主键
  4. title = models.CharField(max_length=32,unique=True) #字符串
  5. price = models.DecimalField(max_digits=16,decimal_places=2) #小数
  6. pub_time = models.DateField() #日期
  7. publish = models.CharField(max_length=20)
  8.  

    # def __str__(self):

#    return self.title

  2.更多字段

  1. '''
  2.  
  3. <1> CharField
  4. 字符串字段, 用于较短的字符串.
  5. CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数.
  6.  
  7. <2> IntegerField
  8. #用于保存一个整数.
  9.  
  10. <3> FloatField
  11. 一个浮点数. 必须 提供两个参数:
  12.  
  13. 参数 描述
  14. max_digits 总位数(不包括小数点和符号)
  15. decimal_places 小数位数
  16. 举例来说, 要保存最大值为 999 (小数点后保存2位),你要这样定义字段:
  17.  
  18. models.FloatField(..., max_digits=5, decimal_places=2)
  19. 要保存最大值一百万(小数点后保存10位)的话,你要这样定义:
  20.  
  21. models.FloatField(..., max_digits=17, decimal_places=10) #max_digits大于等于17就能存储百万以上的数了
  22. admin 用一个文本框(<input type="text">)表示该字段保存的数据.
  23.  
  24. <4> AutoField
  25. 一个 IntegerField, 添加记录时它会自动增长. 你通常不需要直接使用这个字段;
  26. 自定义一个主键:my_id=models.AutoField(primary_key=True)
  27. 如果你不指定主键的话,系统会自动添加一个主键字段到你的 model.
  28.  
  29. <5> BooleanField
  30. A true/false field. admin 用 checkbox 来表示此类字段.
  31.  
  32. <6> TextField
  33. 一个容量很大的文本字段.
  34. admin 用一个 <textarea> (文本区域)表示该字段数据.(一个多行编辑框).
  35.  
  36. <7> EmailField
  37. 一个带有检查Email合法性的 CharField,不接受 maxlength 参数.
  38.  
  39. <8> DateField
  40. 一个日期字段. 共有下列额外的可选参数:
  41. Argument 描述
  42. auto_now 当对象被保存时,自动将该字段的值设置为当前时间.通常用于表示 "last-modified" 时间戳.
  43. auto_now_add 当对象首次被创建时,自动将该字段的值设置为当前时间.通常用于表示对象创建时间.
  44. (仅仅在admin中有意义...)
  45.  
  46. <9> DateTimeField
  47. 一个日期时间字段. 类似 DateField 支持同样的附加选项.
  48.  
  49. <10> ImageField
  50. 类似 FileField, 不过要校验上传对象是否是一个合法图片.#它有两个可选参数:height_field和width_field,
  51. 如果提供这两个参数,则图片将按提供的高度和宽度规格保存.
  52. <11> FileField
  53. 一个文件上传字段.
  54. 要求一个必须有的参数: upload_to, 一个用于保存上载文件的本地文件系统路径. 这个路径必须包含 strftime #formatting,
  55. 该格式将被上载文件的 date/time
  56. 替换(so that uploaded files don't fill up the given directory).
  57. admin 用一个<input type="file">部件表示该字段保存的数据(一个文件上传部件) .
  58.  
  59. 注意:在一个 model 中使用 FileField ImageField 需要以下步骤:
  60. 1)在你的 settings 文件中, 定义一个完整路径给 MEDIA_ROOT 以便让 Django在此处保存上传文件.
  61. (出于性能考虑,这些文件并不保存到数据库.) 定义MEDIA_URL 作为该目录的公共 URL. 要确保该目录对
  62. WEB服务器用户帐号是可写的.
  63. 2 在你的 model 中添加 FileField ImageField, 并确保定义了 upload_to 选项,以告诉 Django
  64. 使用 MEDIA_ROOT 的哪个子目录保存上传文件.你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT).
  65. 出于习惯你一定很想使用 Django 提供的 get_<#fieldname>_url 函数.举例来说,如果你的 ImageField
  66. 叫作 mug_shot, 你就可以在模板中以 {{ object.#get_mug_shot_url }} 这样的方式得到图像的绝对路径.
  67.  
  68. <12> URLField
  69. 用于保存 URL. verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在( URL是否被有效装入且
  70. 没有返回404响应).
  71. admin 用一个 <input type="text"> 文本框表示该字段保存的数据(一个单行编辑框)
  72.  
  73. <13> NullBooleanField
  74. 类似 BooleanField, 不过允许 NULL 作为其中一个选项. 推荐使用这个字段而不要用 BooleanField null=True 选项
  75. admin 用一个选择框 <select> (三个可选择的值: "Unknown", "Yes" "No" ) 来表示这种字段数据.
  76.  
  77. <14> SlugField
  78. "Slug" 是一个报纸术语. slug 是某个东西的小小标记(短签), 只包含字母,数字,下划线和连字符.#它们通常用于URLs
  79. 若你使用 Django 开发版本,你可以指定 maxlength. maxlength 未指定, Django 会使用默认长度: 50. #在
  80. 以前的 Django 版本,没有任何办法改变50 这个长度.
  81. 这暗示了 db_index=True.
  82. 它接受一个额外的参数: prepopulate_from, which is a list of fields from which to auto-#populate
  83. the slug, via JavaScript,in the object's admin form: models.SlugField
  84. (prepopulate_from=("pre_name", "name"))prepopulate_from 不接受 DateTimeFields.
  85.  
  86. <13> XMLField
  87. 一个校验值是否为合法XML的 TextField,必须提供参数: schema_path, 它是一个用来校验文本的 RelaxNG schema #的文件系统路径.
  88.  
  89. <14> FilePathField
  90. 可选项目为某个特定目录下的文件名. 支持三个特殊的参数, 其中第一个是必须提供的.
  91. 参数 描述
  92. path 必需参数. 一个目录的绝对文件系统路径. FilePathField 据此得到可选项目.
  93. Example: "/home/images".
  94. match 可选参数. 一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名.
  95. 注意这个正则表达式只会应用到 base filename 而不是
  96. 路径全名. Example: "foo.*\.txt^", 将匹配文件 foo23.txt 却不匹配 bar.txt 或 foo23.gif.
  97. recursive可选参数.要么 True 要么 False. 默认值是 False. 是否包括 path 下面的全部子目录.
  98. 这三个参数可以同时使用.
  99. match 仅应用于 base filename, 而不是路径全名. 那么,这个例子:
  100. FilePathField(path="/home/images", match="foo.*", recursive=True)
  101. ...会匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif
  102.  
  103. <15> IPAddressField
  104. 一个字符串形式的 IP 地址, (i.e. "24.124.1.30").
  105. <16> CommaSeparatedIntegerField
  106. 用于存放逗号分隔的整数值. 类似 CharField, 必须要有maxlength参数.
  107.  
  108. '''

  3.更多参数

  1. (1)null
  2.  
  3. 是否可为空 ,如果为TrueDjango 将用NULL 来在数据库中存储空值。 默认值是 False.
  4.  
  5. (1)blank
  6.  
  7. 如果为True,该字段允许不填。默认为False
  8. 要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。
  9. 如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。
  10.  
  11. (2)default
  12.  
  13. 字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用,如果你的字段没有设置可以为空,那么将来如果我们后添加一个字段,这个字段就要给一个default
  14.  
  15. (3)primary_key
  16.  
  17. 如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True
  18. Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为,
  19. 否则没必要设置任何一个字段的primary_key=True
  20.  
  21. (4)unique
  22.  
  23. 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的
  24.  
  25. (5)choices
  26. 由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,<br>而且这个选择框的选项就是choices 中的选项。

六.记录的 增 ,删 ,改 ,查 .

  1.增

  方式1:

  1. book_obj = models.Book(title=’xx’,pub=’xx’)
  2. Book_obj.save()
  1. book_obj=Book(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12") #实例化一个对象表示一行记录,时间日期如果只写日期的话,    时间默认是00.00.00,注意日期写法必须是2012-12-12这种格式
  2. book_obj.save() #就是pymysql的那个commit提交

  

  方式2:

  1. models.Book.objects.create(title=’xx’,pub=’xx’)
  1. # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象
  2. book_obj=Book.objects.create(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12") #这个返回值就像是mysql    里面咱们讲的那个new对象,还记得吗,他跟上面那种创建方式创建的那个对象是一样的
  3.   #这个Book.objects就像是一个Book表的管理器一样,提供了增删改查所有的方法
  4. print(book_obj.title) #可以基于这个对象来取这个新添加的记录对象的属性值
  5. dic1 = {'title':'linux','state'=True,'price':100,'publish'='2018-12-12'}
  6.  
  7. #这样写的时候,注意如果你用post提交过来的请求,有个csrf_token的键值对要删除,并且request.POST是不能直接在request.POST里面进行修改和删除的,data = request.POST.dict()转换成普通的字典-->Book.objects.create(**data)
  8. book.objects.create(**dic1)

  方式3: 批量增加(bulk_creat)

  1. def test(request):
  2.   # 1.这是一个一个添加,速度慢
  3. # for i in range(100):
  4. # models.UserInfo.objects.create(
  5. # name='alex%s' % i,
  6. # password='sb%s' % i,
  7. # )
  8.      # 2.创建100个对象 加入列表 ,速度快(推荐)
  9. obj_list = []
  10. for i in range(100):
  11. obj = models.UserInfo(
  12. name='wusir%s'%i,
  13. password='wusirsb%s'%i,
  14. )
  15. obj_list.append(obj)
  16. models.UserInfo.objects.bulk_create(obj_list)
  17.  
  18. return HttpResponse('ok')

  2.删

  delete()方法的调用者可以是一个model对象,也可以是一个queryset集合。

  1. models.Book.objects.filter(title=’水浒传’,id=2).delete()

  3.改

  1. models.Book.objects.filter(title=’水浒传’,id=2).update(title=’水浒传2’)

  4.查

(都是querset 类型  ,类似于列表)

  ① 查询所有的

  1. models.Book.objects.all()

  ②查询筛选的

  1. models.Book.objects.filter(title=’水浒传’,id=2) and多添加查询

<1> all(): 查询所有结果,结果是queryset类型

<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象,结果也是queryset类型

  Book.objects.filter(title='linux',price=100) #里面的多个条件用逗号分开,并且这几个条件必须都成立,是and的关系,

  or关系的我们后面再学,直接在这里写是搞不定or的

<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,不是queryset类型,是行记录对象,返回结果有且只有一个,
    如果符合筛选条件的对象超过一个或者没有都会抛出错误。捕获异常try。 Book.objects.get(id=1)

<4> exclude(**kwargs): 排除的意思,它包含了与所给筛选条件不匹配的对象,没有不等于的操作昂,用这个exclude,

    返回值是queryset类型 Book.objects.exclude(id=6),返回id不等于6的所有的对象,

    或者在queryset基础上调用,Book.objects.all().exclude(id=6)
                
<5> order_by(*field): queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,

  返回值还是queryset类型
   models.Book.objects.all().order_by('price','id') #直接写price,默认是按照price升序排列,

  按照字段降序排列,就写个负号就行了order_by('-price'),order_by('price','id')是多条件排序,

  按照price进行升序,price相同的数据,按照id进行升序

<6> reverse(): queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型

<7> count(): queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。

<8> first(): queryset类型的数据来调用,返回第一条记录

    Book.objects.all()[0] = Book.objects.all().first(),得到的都是model对象,不是queryset

<9> last(): queryset类型的数据来调用,返回最后一条记录

<10> exists(): queryset类型的数据来调用,是否包含数据 .如果QuerySet包含数据,就返回True,否则返回False
     空的queryset类型数据也有布尔值True和False,但是一般不用它来判断数据库里面是不是有数据,

    如果有大量的数据,你用它来判断,那么就需要查询出所有的数据,效率太差了,用count或者exits
      例:all_books = models.Book.objects.all().exists()

    #翻译成的sql是SELECT (1) AS `a` FROM `app01_book` LIMIT 1,

    就是通过limit 1,取一条来看看是不是有数据

<11> values(*field): 用的比较多,queryset类型的数据来调用,

    返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
    model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,

    就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。
<12> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

<13> distinct(): values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复纪录

  ③模糊查询(单表双下划綫查询)

  1. Book.objects.filter(price__in=[100,200,300]) #price值等于这三个里面的任意一个的对象
  2. Book.objects.filter(price__gt=100) #大于,大于等于是price__gte=100,别写price>100,这种参数不支持
  3. Book.objects.filter(price__lt=100) #小于
  4. Book.objects.filter(price__range=[100,200]) #sql的between and,大于等于100,小于等于200
  5. Book.objects.filter(title__contains="python") #title值中包含python的
  6. Book.objects.filter(title__icontains="python") #不区分大小写
  7. Book.objects.filter(title__startswith="py") #以什么开头,istartswith 不区分大小写
  8. Book.objects.filter(pub_date__year=2012)

  日期查询示例

  1. # all_books = models.Book.objects.filter(pub_date__year=2012) #找2012年的所有书籍
  2. # all_books = models.Book.objects.filter(pub_date__year__gt=2012)#找大于2012年的所有书籍
  3. all_books = models.Book.objects.filter(pub_date__year=2019,pub_date__month=2)#找2019年月份的所有书籍,  如果明明有结果,你却查不出结果,是因为mysql数据库的时区和咱们django的时区不同导致的,了解一下就行了,  你需要做的就是将django中的settings配置文件里面的USE_TZ = True改为False,就可以查到结果了,以后这个值就改为False,  而且就是因为咱们用的mysql数据库才会有这个问题,其他数据库没有这个问题。

七.pucharm 自带的数据库管理

day054 组件 CBV FBV 装饰器 ORM增删改查的更多相关文章

  1. 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查

    内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...

  2. Django框架(三)—— orm增删改查、Django生命周期

    目录 orm增删改查.Django生命周期 一.orm介绍 二.orm增删改字段 三.Django生命周期 orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object ...

  3. ORM增删改查并发性能测试2

    前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...

  4. django ORM 增删改查 模糊查询 字段类型 及参数等

    ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...

  5. ORM增删改查

    目录 orm django 连接mysql顺序 1 settings配置文件中 2 项目文件夹下的init文件中写上下面内容, 补充 3 models文件中创建一个类(类名就是表名) 4.执行数据库同 ...

  6. 饮冰三年-人工智能-Python-24 Django ORM增删改查

    一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...

  7. beego 初体验 - orm - 增删改查

    本文记录一下 beego orm 简单的增删改查,大牛请绕道. 首先,注册4个增删改查的路由: 其次,在 views 文件夹下增加对应的模板(页面): controller 类里写上增删改查的方法: ...

  8. Django框架(三)-- orm增删改查、Django生命周期

    一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...

  9. ORM增删改查并发性能测试

    这两天在对一些ORM进行性能测试(涉及SqlSugar.FreeSql.Fast.Framework.Dapper.LiteSql),测试用的是Winform程序,别人第一眼看到我的程序,说,你这测试 ...

随机推荐

  1. js实现往数组中添加非存在的对象,如果存在就改变键值。

    let arr = [] // 数组中元素数据类型为{name: 'bb', age: 12} // 现在需求是,将每次获得的新对象{name: '', age: }push到数组arr中,但前提是数 ...

  2. map的循环删除操作

    1.错误示例 Map<String,InterfaceOutParam> outCodes1 = outParamList.stream().collect(Collectors.toMa ...

  3. [JavaScript] 给input标签传值

    body: <input type="text" style="width: 240px;" name="orgname" id=&q ...

  4. linux存储管理之交换分区

    交换分区管理 Swap ====================================================================================作用: ...

  5. POJ-3233 Matrix Power Series 矩阵A^1+A^2+A^3...求和转化

    S(k)=A^1+A^2...+A^k. 保利求解就超时了,我们考虑一下当k为偶数的情况,A^1+A^2+A^3+A^4...+A^k,取其中前一半A^1+A^2...A^k/2,后一半提取公共矩阵A ...

  6. 6 款最棒的 Go 语言 Web 框架简介

    地址: https://studygolang.com/articles/11897?fr=sidebar

  7. SAP WDA 自建Portal

    1.新建Package:ZWDA. 2.新建Portal用户表:ZPORTAL_USER 上图中是基于CRM的BP来做的用户表,如果针对其他系统可以使用组织架构里的角色用户... 3.新建用户视图配置 ...

  8. requestAnimationFrame 兼容不同浏览器

    简单兼容: window.requestAnimFrame = (function(){ return window.requestAnimationFrame || window.webkitReq ...

  9. Android基础知识(一)

    前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...

  10. 使用blas做矩阵乘法

      #define min(x,y) (((x) < (y)) ? (x) : (y)) #include <stdio.h> #include <stdlib.h> # ...