1、settings

  1. """
  2. Django settings for day80 project.
  3.  
  4. Generated by 'django-admin startproject' using Django 1.11.6.
  5.  
  6. For more information on this file, see
  7. https://docs.djangoproject.com/en/1.11/topics/settings/
  8.  
  9. For the full list of settings and their values, see
  10. https://docs.djangoproject.com/en/1.11/ref/settings/
  11. """
  12.  
  13. import os
  14.  
  15. # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
  16. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  17.  
  18. # Quick-start development settings - unsuitable for production
  19. # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
  20.  
  21. # SECURITY WARNING: keep the secret key used in production secret!
  22. SECRET_KEY = '7x(f$0j0c#)hn)8i(uv6j*sg^h_7v9$eak#pu_n4ji05=v28ca'
  23.  
  24. # SECURITY WARNING: don't run with debug turned on in production!
  25. DEBUG = True
  26.  
  27. ALLOWED_HOSTS = []
  28.  
  29. # Application definition
  30.  
  31. INSTALLED_APPS = [
  32. 'django.contrib.admin',
  33. 'django.contrib.auth',
  34. 'django.contrib.contenttypes',
  35. 'django.contrib.sessions',
  36. 'django.contrib.messages',
  37. 'django.contrib.staticfiles',
  38. 'app01.apps.App01Config',
  39. 'rbac',
  40. ]
  41. from django.middleware.common import CommonMiddleware
  42. MIDDLEWARE = [
  43. 'django.middleware.security.SecurityMiddleware',
  44. 'django.contrib.sessions.middleware.SessionMiddleware',
  45. 'django.middleware.common.CommonMiddleware',
  46. 'django.middleware.csrf.CsrfViewMiddleware',
  47. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  48. 'django.contrib.messages.middleware.MessageMiddleware',
  49. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  50. 'rbac.middlewear.rbac.Middle',
  51. ]
  52.  
  53. ROOT_URLCONF = 'day80.urls'
  54.  
  55. TEMPLATES = [
  56. {
  57. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  58. 'DIRS': [os.path.join(BASE_DIR, 'templates')]
  59. ,
  60. 'APP_DIRS': True,
  61. 'OPTIONS': {
  62. 'context_processors': [
  63. 'django.template.context_processors.debug',
  64. 'django.template.context_processors.request',
  65. 'django.contrib.auth.context_processors.auth',
  66. 'django.contrib.messages.context_processors.messages',
  67. ],
  68. },
  69. },
  70. ]
  71.  
  72. WSGI_APPLICATION = 'day80.wsgi.application'
  73.  
  74. # Database
  75. # https://docs.djangoproject.com/en/1.11/ref/settings/#databases
  76.  
  77. DATABASES = {
  78. 'default': {
  79. 'ENGINE': 'django.db.backends.sqlite3',
  80. 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  81. }
  82. }
  83.  
  84. # Password validation
  85. # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
  86.  
  87. AUTH_PASSWORD_VALIDATORS = [
  88. {
  89. 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
  90. },
  91. {
  92. 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
  93. },
  94. {
  95. 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
  96. },
  97. {
  98. 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
  99. },
  100. ]
  101.  
  102. # Internationalization
  103. # https://docs.djangoproject.com/en/1.11/topics/i18n/
  104.  
  105. LANGUAGE_CODE = 'en-us'
  106.  
  107. TIME_ZONE = 'UTC'
  108.  
  109. USE_I18N = True
  110.  
  111. USE_L10N = True
  112.  
  113. USE_TZ = True
  114.  
  115. # Static files (CSS, JavaScript, Images)
  116. # https://docs.djangoproject.com/en/1.11/howto/static-files/
  117.  
  118. STATIC_URL = '/static/'
  119. # ==========静态文件配置=========
  120. STATICFILES_DIRS = (
  121. os.path.join(BASE_DIR,'static'),
  122. )
  123. # ==========rbac============
  124. PERMISSION_URL_DICT = "permission_url_list"
  125. PERMISSION_MENU_KEY = "permission_menu_list"
  126.  
  127. # =========白名单(不需要权限就可以看到的)==========
  128. WHITE_LIST =[
  129. "/login/",
  130. "/admin.*",
  131. "/index/",
  132. ]

settings.py

2、rbac应用下的models

  1. from django.db import models
  2.  
  3. # Create your models here.
  4. class Role(models.Model):
  5. title = models.CharField(max_length=32,verbose_name="角色")
  6. permissions = models.ManyToManyField(to="Permission",verbose_name="拥有权限的角色",blank=True) #权限和角色是多对多的关系
  7.  
  8. def __str__(self):
  9. return self.title
  10. class Meta:
  11. verbose_name_plural = "角色表"
  12.  
  13. class Permission(models.Model):
  14. title = models.CharField(max_length=32,verbose_name="权限名")
  15. url = models.CharField(max_length=32,verbose_name="带正则的url")
  16. codes = models.CharField(max_length=32,verbose_name="代码")
  17. group = models.ForeignKey(to="Group",verbose_name="所属组",blank=True) #组和权限是一对多的关系,一个组有多个权限
  18. menu_gp = models.ForeignKey(to='Permission',related_name='aaa',null=True,blank=True,verbose_name="组内菜单")
  19. def __str__(self):
  20. return self.title
  21. class Meta:
  22. verbose_name_plural = "权限表"
  23.  
  24. class UserInfo(models.Model):
  25. name = models.CharField(max_length=32,verbose_name="姓名")
  26. password = models.CharField(max_length=64,verbose_name="密码")
  27. email = models.CharField(max_length=32,verbose_name="邮箱")
  28. roles = models.ManyToManyField(to="Role",blank=True) #用户和角色是多对多的关系
  29. def __str__(self):
  30. return self.name
  31. class Meta:
  32. verbose_name_plural = "用户表"
  33.  
  34. class Group(models.Model):
  35. title = models.CharField(max_length=32,verbose_name="组名称")
  36. menu = models.ForeignKey(to="Menu",verbose_name="组内菜单",blank=True) #一个组下有多个菜单
  37. def __str__(self):
  38. return self.title
  39. class Meta:
  40. verbose_name_plural = "组"
  41.  
  42. class Menu(models.Model):
  43. caption = models.CharField(max_length=32,verbose_name="菜单")
  44. def __str__(self):
  45. return self.caption
  46. class Meta:
  47. verbose_name_plural = "菜单表"

models.py

3、urls

  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from app01 import views
  4. urlpatterns = [
  5. url(r'^admin/', admin.site.urls),
  6. url(r'^login/$', views.login),
  7. url(r'^index/$', views.index),
  8. url(r'^userinfo/$', views.userinfo),
  9. url(r'^userinfo/add/$', views.userinfo_add),
  10. url(r'^userinfo/del/(\d+)/$', views.userinfo_del),
  11. url(r'^userinfo/edit/(\d+)/$', views.userinfo_edit),
  12. url(r'^order/$', views.order),
  13. url(r'^order/add/$', views.order_add),
  14. url(r'^order/del/(\d+)/$', views.order_del),
  15. url(r'^order/edit/(\d+)/$', views.order_edit),
  16. ]

urls.py

4、初始化   server--init_permission

  1. #!usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. from django.conf import settings
  4. def init_permission(user, request):
  5. '''
  6. 初始化权限信息,获取权限信息并放置到session中
  7. :param user:
  8. :param request:
  9. :return:
  10. '''
  11. permission_list = user.roles.values('permissions__id',
  12. 'permissions__title', # 用户列表
  13. 'permissions__url',
  14. 'permissions__codes',
  15. 'permissions__menu_gp_id', # 组内菜单ID,Null表示是菜单
  16. 'permissions__group_id',
  17. 'permissions__group__menu_id', # 菜单ID
  18. 'permissions__group__menu__caption', # 菜单名称
  19. ).distinct() # 获取当前角色对象的所有的权限并去重
  20. # print(permission_list)
  21. # 权限相关
  22. url_dict = {}
  23. for item in permission_list:
  24. group_id = item["permissions__group_id"]
  25. url = item["permissions__url"]
  26. code = item["permissions__codes"]
  27. # print("code_list", code)
  28. if group_id in url_dict:
  29. url_dict[group_id]["code"].append(code) # 如果id在里面就把code和url添加进去
  30. url_dict[group_id]["urls"].append(url)
  31. else:
  32. # 如果不在就设置
  33. url_dict[group_id] = {
  34. "code": [code, ],
  35. "urls": [url, ]
  36. }
  37. request.session[settings.PERMISSION_URL_DICT] = url_dict
  38. print(url_dict)
  39.  
  40. #菜单相关
  41. # 1、先去掉不是菜单的
  42. menu_list = []
  43. for item in permission_list:
  44. tpl = {
  45. "id":item["permissions__id"],
  46. "title":item["permissions__title"],
  47. "url":item["permissions__url"],
  48. "menu_gp_id":item["permissions__menu_gp_id"],
  49. "menu_id":item["permissions__group__menu_id"],
  50. "menu_title":item["permissions__group__menu__caption"]
  51. }
  52. menu_list.append(tpl)
  53. request.session[settings.PERMISSION_MENU_KEY] = menu_list
  54. print("============",menu_list)

sever下的init_permission.py

5、app01下的views

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from django.conf import settings
  3. # Create your views here.
  4. from rbac import models
  5. import re
  6. from rbac.service.init_permission import init_permission
  7. class BasePagPermission(object):
  8. def __init__(self, code_list):
  9. self.code_list = code_list
  10.  
  11. def has_add(self):
  12. if "add" in self.code_list:
  13. return True
  14.  
  15. def has_del(self):
  16. if "del" in self.code_list:
  17. return True
  18.  
  19. def has_edit(self):
  20. if "edit" in self.code_list:
  21. return True
  22.  
  23. def login(request):
  24. if request.method == "GET":
  25. return render(request, "login.html")
  26. else:
  27. username = request.POST.get("username")
  28. password = request.POST.get("password")
  29. user = models.UserInfo.objects.filter(name=username, password=password).first()
  30. if user:
  31. init_permission(user, request)
  32. return redirect("/userinfo/")
  33. else:
  34. return render(request, "login.html")
  35.  
  36. def index(request):
  37. return render(request, "index.html")
  38.  
  39. def userinfo(request):
  40. pagpermission = BasePagPermission(request.permission_code_url) # 实例化
  41. # print("code......", request.permission_code_url)
  42. data_list = [
  43. {"id": 1, "name": "haiyan1"},
  44. {"id": 2, "name": "haiyan2"},
  45. {"id": 3, "name": "haiyan3"},
  46. {"id": 4, "name": "haiyan4"},
  47. {"id": 5, "name": "haiyan5"},
  48. ]
  49. #print("data_list",data_list)
  50. #print("pagpermission",pagpermission)
  51. return render(request, "userinfo.html", {"data_list": data_list, "pagpermission": pagpermission})
  52.  
  53. def userinfo_add(request):
  54. if request.method == "GET":
  55. return render(request,"userinfo_add.html")
  56. else:
  57. return redirect("/userinfo/")
  58.  
  59. def userinfo_del(request, nid):
  60. return HttpResponse("删除用户")
  61.  
  62. def userinfo_edit(request, nid):
  63. return HttpResponse("编辑用户")
  64.  
  65. def order(request):
  66. pagpermission = BasePagPermission(request.permission_code_url) # 实例化
  67. print("code......", request.permission_code_url)
  68. return render(request,"order.html",{"pagpermission":pagpermission})
  69.  
  70. def order_add(request):
  71. return HttpResponse("添加订单")
  72.  
  73. def order_del(request, nid):
  74. return HttpResponse("删除订单")
  75.  
  76. def order_edit(request, nid):
  77. return HttpResponse("编辑订单")

views.py

6、中间件

  1. #!usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. from django.shortcuts import render, redirect, HttpResponse
  4. from django.conf import settings
  5. import re
  6.  
  7. class MiddlewareMixin(object):
  8. def __init__(self, get_response=None):
  9. self.get_response = get_response
  10. super(MiddlewareMixin, self).__init__()
  11.  
  12. def __call__(self, request):
  13. response = None
  14. if hasattr(self, 'process_request'):
  15. response = self.process_request(request)
  16. if not response:
  17. response = self.get_response(request)
  18. if hasattr(self, 'process_response'):
  19. response = self.process_response(request, response)
  20. return response
  21.  
  22. class Middle(MiddlewareMixin): # 必须去继承这个类
  23. def process_request(self, request):
  24. current_url = request.path_info # 获取当前请求的路径
  25.  
  26. # 如果匹配的是白名单里面的就让通过,不需要权限
  27. for url in settings.WHITE_LIST:
  28. if re.match(url, current_url):
  29. return None
  30. permission_dict = request.session.get(settings.PERMISSION_URL_DICT) # 获取session
  31. if not permission_dict: # 如果没有得到,就直接跳转到login页面
  32. return redirect("/login/")
  33.  
  34. flag = False
  35. for group_id, code_url in permission_dict.items():
  36. for db_url in code_url["urls"]:
  37. regex = "^{0}$".format(db_url)
  38. # 因为match匹配的时候会把你只要有的都匹配到了,我们只匹配当前的url,所以得加一个起始终止符
  39. # print(regex, current_url)
  40. if re.match(regex, current_url):
  41. # print(1111111)
  42. request.permission_code_url = code_url["code"] # 用户输入的url和数据库的url匹配成功之后成功之后先把code保存在request中,方便以后判断
  43. flag = True
  44. break # 如果匹配成功就进入页面
  45. # 注意在这里不能用return,在中间件中process_request这个函数如果有return就只会执行自己的
  46. # response和上面的response,不会执行后续的。没有return就会去继续执行后续中间件和视图函数
  47. if flag: # 结束外层循环
  48. break
  49. if not flag:
  50. return HttpResponse("无权访问") # 如果访问不成功就显示无权访问
  51.  
  52. def process_reponse(self, request, response):
  53. return response

middlewear下的rbac.py

7、templatetags下的rbac.py

  1. #!usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. from django.conf import settings
  4. import re
  5. from django.template import Library
  6. register = Library()
  7. @register.inclusion_tag("xxxx.html")
  8. def menu_html(request):
  9. """
  10. 去Session中获取菜单相关信息,匹配当前URL,生成菜单
  11. :param request:
  12. :return:
  13. """
  14. menu_list = request.session.get(settings.PERMISSION_MENU_KEY)
  15. current_url = request.path_info
  16. menu_dict = {}
  17. for item in menu_list:
  18. # 循环找到可以作为菜单的权限
  19. if not item["menu_gp_id"]:
  20. menu_dict[item["id"]] = item
  21. # 正则匹配添加active
  22. for item in menu_list:
  23. regex = "^{0}$".format(item["url"])
  24. if re.match(regex, current_url):
  25. # 匹配成功在根据id去判断,如果菜单id有值就不是菜单,则去找它的值对应的id,添加active
  26. # ,为null时就是菜单,直接给自己添加一个active
  27. if not item["menu_gp_id"]: #是菜单
  28. menu_dict[item["id"]]["active"] = True
  29. else:
  30. menu_dict[item["menu_gp_id"]]["active"] = True
  31.  
  32. result = {}
  33. for item in menu_dict.values():
  34. active = item.get("active")
  35. menu_id = item["menu_id"]
  36. if menu_id in result:
  37. result[menu_id]["children"].append({'title': item['title'], 'url': item['url'], 'active': active})
  38. if active:
  39. result[menu_id]["active"] = True
  40. else:
  41. result[menu_id] = {
  42. 'menu_id': item['menu_id'],
  43. 'menu_title': item['menu_title'],
  44. 'active': active,
  45. 'children': [
  46. {'title': item['title'], 'url': item['url'], 'active': active}
  47. ]
  48. }
  49. print("result",result)
  50. return {"menu_dict":result}

自定义标签rbac.py

8、template

  1. {% load rbac %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <meta name="viewport" content="width=device-width">
  8. <title>Title</title>
  9. <link rel="stylesheet" href="/static/rbac/rbac.css">
  10. </head>
  11. <body>
  12. <div class="aaa">
  13. <div class="left">
  14. {% menu_html request %}
  15. </div>
  16. <div class="right">
  17. {% block content %}
  18.  
  19. {% endblock %}
  20. </div>
  21. </div>
  22. <script src="/static/jquery-3.2.1.min.js"></script>
  23. <script src="/static/rbac/rbac.js"></script>
  24.  
  25. </body>
  26. </html>

base.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width">
  7. <title>Title</title>
  8. </head>
  9. <body>
  10. <h1>hello--{{ user.name }}</h1>
  11. </body>
  12. </html>

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width">
  7. <title>Title</title>
  8. </head>
  9. <body>
  10. <form method="post" action="/login/">
  11. {% csrf_token %}
  12. <p>姓名:<input type="text" name="username"></p>
  13. <p>密码:<input type="password" name="password"></p>
  14. <p><input type="submit" value="提交"></p>
  15. </form>
  16. </body>
  17. </html>

login.html

  1. {% extends "base.html" %}
  2. {% block content %}
  3. <h1>订单页面</h1>
  4. {% endblock %}

order.html

  1. {% extends "base.html" %}
  2. {% block content %}
  3. {% if pagpermission.has_add %}
  4. <a href="/userinfo/add/">添加</a>
  5. {% endif %}
  6. <table border="">
  7. <thead>
  8. <th>编号</th>
  9. <th>姓名</th>
  10. <th>操作</th>
  11. </thead>
  12. <tbody>
  13. {% for row in data_list %}
  14. <tr>
  15. <td>{{ row.id }}</td>
  16. <td>{{ row.name }}</td>
  17. <td>
  18. {% if pagpermission.has_edit %}
  19. <a href="#">编辑</a>
  20. {% endif %}
  21. {% if pagpermission.has_del %}
  22. <a href="#">删除</a>
  23. {% endif %}
  24. </td>
  25. </tr>
  26. {% endfor %}
  27. </tbody>
  28. </table>
  29. {% endblock %}

userinfo.html

  1. {% extends "base.html" %}
  2. {% block content %}
  3. <form action="" method="post">
  4. {% csrf_token %}
  5. <p>编号:<input type="text" name="bianhao"></p>
  6. <p>姓名:<input type="text" name="name"></p>
  7. <input type="submit" value="提交">
  8. </form>
  9. {% endblock %}

userinfo_add.html

  1. {% for k,item in menu_dict.items %}
  2. <div class="item-title">{{ item.menu_title }}</div>
  3. {% if item.active %}
  4. <div class="item-permission">
  5. {% else %}
  6. <div class="item-permission hide">
  7. {% endif %}
  8. {% for v in item.children %}
  9. {% if v.active %}
  10. <a href="{{ v.url }}" class="active">{{ v.title }}</a>
  11. {% else %}
  12. <a href="{{ v.url }}">{{ v.title }}</a>
  13. {% endif %}
  14. {% endfor %}
  15. </div>
  16. {% endfor %}
  17.  
  18. {# <div class="item-title">菜单一</div>#}
  19. {# <div class="item-permission">#}
  20. {# <a href="">用户列表</a>#}
  21. {# <a href="">订单列表</a>#}
  22. {# </div>#}
  23. {# <div class="item-title">菜单二</div>#}
  24. {# <div class="item-permission hide">#}
  25. {# <a href="">用户列表</a>#}
  26. {# <a href="">订单列表</a>#}
  27. {# </div>#}

xxxx.html

9、static---rbac---rbac.css

  1. .left{
  2. float: left;
  3. width: 20%;
  4. height: 500px;
  5. background-color: coral;
  6. padding: 20px 20px;
  7. }
  8. .right{
  9. width: 80%;
  10. height: 500px;
  11. background-color: azure;
  12. }
  13. .item-permission a{
  14. display: block;
  15. }
  16. .hide{
  17. display: none;
  18. }
  19. .item-permission a.active{
  20. color: red;
  21. }

rbac.css

10、static---rbac---rbac.js

  1. // 方式一
  2. $(function () {
  3. $(".item-title").click(function () {
  4. $(this).next().toggleClass("hide")
  5. })
  6. });
  7. // 方式二:
  8. // $(function () {
  9. // $('.item-title').click(function () {
  10. // if($(this).next().hasClass('hide')){
  11. // $(this).next().removeClass('hide')
  12. // }else{
  13. // $(this).next().addClass('hide')
  14. // }
  15. // })
  16. // });

rbac.js

Django框架----权限组件(具体代码实现)的更多相关文章

  1. Django框架----权限管理(设计分析以及具体细节)

    说起权限我们大家都知道,不一样的角色会有不一样的权限.比如就像学生管理系统一样,管理员,老师,学生之间的权限都是不一样的,那么展示的页面也是不一样的.所以,我们现在来看看具体操作. 目标:生成一个独立 ...

  2. 【django之权限组件】

    一.需求分析 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,一个角色拥有若干权限.这样,就构造成& ...

  3. Django 框架 Form组件

    一.Form组件简介 Form组件是django中一个非常强大的组件,在处理服务端和前端的交互上大大的提高了开发人员的开发速度. Form组件的功能: 用于处理前后端的数据认证(显示错误信息) 用于生 ...

  4. Django框架----Form组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  5. Django框架 --序列化组件(serializer)

    一 .Django自带序列化组件 Django内置的serializers(把对象序列化成json字符串) from django.core import serializers from djang ...

  6. Django框架----Form组件补充

    一.Form类 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; 1.Django内置字段如下: 1 Field 2 required=T ...

  7. Django万能权限框架组件

    业务场景分析 假设我们在开发一个培训机构的 客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下 客户管理 销售人员可以录入客户信息,对客户进行跟踪,为客户办理报名手续 ...

  8. Django框架深入了解_03(DRF之认证组件、权限组件、频率组件、token)

    一.认证组件 使用方法: ①写一个认证类,新建文件:my_examine.py # 导入需要继承的基类BaseAuthentication from rest_framework.authentica ...

  9. Django框架之DRF 认证组件源码分析、权限组件源码分析、频率组件源码分析

    认证组件 权限组件 频率组件

随机推荐

  1. eclipse中安装XML editor Rinzo

    eclipse中安装XML editor Rinzo  1. 较高版本的eclipse可以通过 Help--Market 搜索 Rinzo,然后安装 2. 第1种方法如果不行,尝试下面的方法 (1)从 ...

  2. PBFT(拜占庭容错)简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POW(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算力变的不怎么重要了,而今PO ...

  3. NgDL:第三周:浅层NN

    1.激活函数 1.tanh函数比sigmoid效果更好,它的区间是[-1,1],所以均值为0,有类似于让数据中心化的效果. //此时Ng说,tanh函数几乎在所有场合都更优越. 2.但是如果yhat是 ...

  4. [LeetCode] 598. Range Addition II_Easy tag: Math

    做个基本思路可以用 brute force, 但时间复杂度较高. 因为起始值都为0, 所以肯定是左上角的重合的最小的长方形就是结果, 所以我们求x, y 的最小值, 最后返回x*y. Code    ...

  5. Eclipse + Maven 安装配置

    1. 下载 http://maven.apache.org/download.cgi 2. 解压 3. 配置环境变量 MAVEN_HOME = D:\Software\apache-maven-3.5 ...

  6. 用Partimage创建或恢复分区备份

    1 Preliminary Note Partimage is part of the system rescue CD found on http://www.sysresccd.org which ...

  7. 搭建redsocks 测试环境

    1. 先来谈谈pc的测试环境 socks5代理,因为要在centos下设置,没有yum到socks, 就安装ss5,wget http://jaist.dl.sourceforge.net/proje ...

  8. 28.json数组,select选择,input输出对应数据

    效果:选择对应的车类,下面的input会实时出现车价. html: <form action="" class="priceModelform1"> ...

  9. react native 中使用swiper

    1.下载依赖 cnpm install react-native-swiper --save 2.在组件中使用 import React, { Component } from 'react'; im ...

  10. C# dataGridView 如何选中整行?

    this.dataGridView1.SelectionMode =DataGridViewSelectionMode.FullRowSelect; dataGridView1即你的dataGridV ...