Django整合多种认证方式

news2024/11/26 14:51:52

承接上一篇:Django知识点总结-CSDN博客 

目录

25.使用 Django REST framework实现用户认证和授权

26.通过djangorestframework-simplejwt使用JWT(JSON Web Token)

27.使用django-auth-ldap进行用户认证

28. 使用django-cas-ng实现集中认证及实现单点登录

29. Google双因素认证 

30.使用钉钉认证


25.使用 Django REST framework实现用户认证和授权

在Django REST framework (DRF) 中实现用户认证和授权是一个常见的需求,用于确保API的安全性。以下是实现用户认证和授权的步骤和示例:

25.1  配置认证和权限类

在视图或视图集中配置认证类来启用认证,以及配置权限类来控制用户对API的访问。

from rest_framework import viewsets, permissions

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    # 使用TokenAuthentication进行认证
    authentication_classes = [rest_framework.authentication.TokenAuthentication]

    # 仅允许管理员用户创建新用户
    def get_permissions(self):
        if self.action == 'create':
            permission_classes = [permissions.IsAdminUser]
        else:
            permission_classes = [permissions.IsAuthenticated]
        return [permission() for permission in permission_classes]

25.2   创建Token模型

 DRF提供了一个内置的Token模型,用于生成和存储用户的认证令牌。

from rest_framework.authtoken.models import Token
from django.contrib.auth.models import User

token, created = Token.objects.get_or_create(user=user)

25.3 为Token认证创建URL

 在项目的URL配置中,添加用于获取或刷新Token的路由。

from django.urls import path
from rest_framework.authtoken.views import obtain_auth_token, refresh_auth_token

urlpatterns = [
    # ... 其他URL配置
    path('api-token-auth/', obtain_auth_token),
    path('api-token-refresh/', refresh_auth_token),
]

25.4   用户登录和获取Token

用户可以通过标准的登录视图登录并获取Token。DRF提供了一个TokenCreateView,可以用于创建Token。

from rest_framework.authtoken.views import TokenCreateView

urlpatterns = [
    # ... 其他URL配置
    path('api-token/', TokenCreateView.as_view()),
]

25.5  使用Token进行API请求

 一旦用户获得了Token,他们就可以将其作为请求的一部分来访问受保护的API。

GET /api/users/ HTTP/1.1
Authorization: Token <token_key>
Host: example.com

25.6  刷新Token

 Token可能会过期,因此需要刷新。DRF提供了一个Token模型的方法来处理Token的刷新。

from rest_framework.authtoken.models import Token

# 刷新Token
def refresh_token(token):
    return Token.objects.filter(key=token).update(expires_at=timezone.now() + datetime.timedelta(days=1))

25.7  自定义认证和权限

 如果需要更复杂的认证逻辑,可以创建自定义的认证类和权限类。

from rest_framework import authentication, permissions

class CustomAuthentication(authentication.BaseAuthentication):
    # 自定义认证逻辑

class CustomPermission(permissions.BasePermission):
    # 自定义权限逻辑

 然后在视图或视图集中使用这些自定义类。

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    authentication_classes = [CustomAuthentication]
    permission_classes = [CustomPermission]

 通过以上步骤,你可以使用Django REST framework实现用户认证和授权,确保API的安全性和数据的保护。

26.通过djangorestframework-simplejwt使用JWT(JSON Web Token)

djangorestframework-simplejwt 是一个为 Django REST framework 提供 JSON Web Token (JWT) 认证支持的库。它使得在 API 中使用 JWT 成为可能,而无需自己实现 JWT 的编码和解码过程。

26.1 安装

首先,你需要安装 djangorestframework-simplejwt。可以通过 pip 来安装:

pip install djangorestframework-simplejwt==5.2.0

26.2 配置

 安装后,你需要在 Django 项目的 settings.py 文件中进行一些配置:

    26.2.1  添加 rest_framework_simplejwt 到 INSTALLED_APPS

INSTALLED_APPS = [
    # ...
    'rest_framework_simplejwt',
]

     26.2.2   设置JWT相关的配置,例如令牌有效期等;

from datetime import timedelta

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
    'AUTH_HEADER_TYPES': ('Bearer',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
}

26.3 使用

djangorestframework-simplejwt 提供了用于生成和验证 JWT 的视图和序列化器:

  获取访问令牌和刷新令牌

from rest_framework_simplejwt.tokens import RefreshToken

def create_token(user):
    return RefreshToken.for_user(user)

   Token视图

 DRF 提供了一个 TokenCreateView,它允许用户通过标准的用户名和密码认证来获取 JWT。

from rest_framework_simplejwt.views import TokenCreateView

urlpatterns = [
    # ... 其他 URL 配置
    path('api/token/', TokenCreateView.as_view(), name='token_create'),
]

   黑名单和刷新令牌

 djangorestframework-simplejwt 允许你将令牌添加到黑名单中,以阻止它们的使用。当刷新令牌被使用时,旧的令牌将被黑名单,并生成一个新的刷新和访问令牌。

from rest_framework_simplejwt.tokens import OutstandingTokenFilter

# 黑名单一个令牌
OutstandingTokenFilter().blacklist(token)

  自定义令牌

 如果需要,你可以自定义令牌类,以添加额外的声明或更改令牌的行为。

from rest_framework_simplejwt.tokens import AccessToken

class MyAccessToken(AccessToken):
    @classmethod
    def create(cls, *args, **kwargs):
        token = super().create(*args, **kwargs)
        # 自定义令牌逻辑
        return token

 然后在 SIMPLE_JWT 设置中指定自定义令牌类:

SIMPLE_JWT['AUTH_TOKEN_CLASSES'] = ('path.to.MyAccessToken',)

 通过使用 djangorestframework-simplejwt,你可以快速地为你的 Django REST framework 项目添加 JWT 认证,而无需从头开始实现认证逻辑。

27.使用django-auth-ldap进行用户认证

django-auth-ldap 是一个 Django 认证后端,它允许 Django 应用通过 LDAP (轻型目录访问协议) 服务进行用户认证。LDAP 通常用于组织内的用户身份验证和目录管理。使用 django-auth-ldap,你可以将 Django 用户认证委托给 LDAP 服务器,从而实现集中式用户管理。

27.1 安装django-auth-ldap

pip install django-auth-ldap==4.1.0

在windows系统可能会安装不成功,参考我之前写的解决方案:Django项目无法安装python-ldap依赖解决方案-CSDN博客

27.2   在 Django 项目的 settings.py 文件中,需要添加 django-auth-ldap 相关的配置:

AUTHENTICATION_BACKENDS = [
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',  # 用于本地数据库认证
]

import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfUniqueNamesType

AUTH_LDAP_SERVER_URI = "ldap://your.ldap.server"  # LDAP服务器地址
AUTH_LDAP_BIND_DN = "cn=binduser,dc=example,dc=com"  # LDAP绑定用户
AUTH_LDAP_BIND_PASSWORD = "password"  # LDAP绑定用户密码

AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "ou=users,dc=example,dc=com",
    ldap.SCOPE_SUBTREE,
    "(uid=%(user)s)"
)

AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}

AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    "ou=groups,dc=example,dc=com",
    ldap.SCOPE_SUBTREE,
    "(objectClass=groupOfUniqueNames)"
)

AUTH_LDAP_GROUP_TYPE = GroupOfUniqueNamesType()

AUTH_LDAP_REQUIRE_GROUP = "cn=django_users,ou=groups,dc=example,dc=com"  # 用户必须属于的组
AUTH_LDAP_DENY_GROUP = "cn=denied_users,ou=groups,dc=example,dc=com"  # 用户不能属于的组

# 启用后,Django将使用LDAP组来确定用户的staff和superuser状态
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_active": "cn=active_users,ou=groups,dc=example,dc=com",
    "is_staff": "cn=staff,ou=groups,dc=example,dc=com",
    "is_superuser": "cn=superuser,ou=groups,dc=example,dc=com"
}

# 如果设置为True,则Django将为用户创建本地账户,即使用户之前未在Django中创建过账户
AUTH_LDAP_ALWAYS_UPDATE_USER = True

27.3 一旦配置完成,就可以使用了,用户就可以通过 LDAP 服务器进行认证。如果用户在 Django 中不存在,并且 AUTH_LDAP_ALWAYS_UPDATE_USER 设置为 True,则会自动创建一个新用户。

27.4 django-auth-ldap 还提供了两个信号:ldap_errorpopulate_user,允许你在认证过程出错或在用户被创建时进行自定义操作。

注意事项:

  • 请确保 LDAP 服务器地址、绑定用户和密码正确无误。
  • 根据你的 LDAP 服务器结构,可能需要调整 AUTH_LDAP_USER_SEARCH 和 AUTH_LDAP_GROUP_SEARCH
  • 如果 LDAP 服务器使用 SSL,AUTH_LDAP_SERVER_URI 应使用 ldaps:// 而不是 ldap://

django-auth-ldap 提供了丰富的配置选项,可以满足不同规模和需求的 LDAP 集成

28. 使用django-cas-ng实现集中认证及实现单点登录

28.1 安装django-cas-ng

pip install django-cas-ng==4.3.0

28.2  在 Django 项目的 settings.py 文件中,进行以下配置:

       添加django_cas_ng

INSTALLED_APPS = [
    # ...
    'django_cas_ng',
    # ...
]

      配置CAS相关的 AUTHENTICATION_BACKENDS:

AUTHENTICATION_BACKENDS = [
    'django_cas_ng.backends.CASBackend',
    # 'django.contrib.auth.backends.ModelBackend'  # 如果需要,保留本地数据库认证
]

      设置CAS相关的参数

CAS_SERVER_URL = 'https://sso.example.com/cas'
CAS_LOGOUT_COMPLETELY = True  # 是否在 CAS 服务器登出时完全登出
CAS_CREATE_USER = True  # 如果用户在 CAS 服务器上存在但在 Django 中不存在,则自动创建用户

28.3 使用过程

    28.3.1  创建CAS视图:

 如果需要一个用于 CAS 认证的视图,可以重用 django-cas-ng 提供的视图:

from django.urls import path
from django_cas_ng.views import LoginView, LogoutView

urlpatterns = [
    path('cas_login/', LoginView.as_view(), name='cas_login'),
    path('cas_logout/', LogoutView.as_view(), name='cas_logout'),
]

28.3.2  在模板中使用CAS认证:

 在 Django 模板中,可以使用 django-cas-ng 提供的模板标签来检查用户是否已经通过 CAS 认证:

{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}. You are logged in via CAS.</p>
{% else %}
    <p><a href="{% url 'cas_login' %}">Login with CAS</a></p>
{% endif %}

28.3.3  处理CAS回调

 当用户通过 CAS 服务器登录后,CAS 服务器会重定向用户回一个预定义的服务 URL。这个 URL 通常是你的 Django 应用中的一个视图,该视图需要处理 CAS 认证的回调:

from django_cas_ng.views import ServiceLoginView

class CASLoginView(ServiceLoginView):
    backend = 'django_cas_ng.backends.CASBackend'

单点登出

django-cas-ng 支持单点登出。当用户点击登出链接时,可以选择是否完全登出,这取决于 CAS_LOGOUT_COMPLETELY 设置。

注意事项:

  • 确保 CAS 服务器的 URL 配置正确。
  • 如果需要同时使用本地数据库认证和 CAS 认证,可以保留 ModelBackend
  • 如果 CAS_CREATE_USER 设置为 True,确保 Django 用户模型的字段能够接受 CAS 用户信息的映射。
  • Windows系统中运行项目会提示安装MIT Kerberos(下载地址:MIT Kerberos Distribution Page),下载后将可执行文件路径添加到系统的环境变量中

 通过使用 django-cas-ng,你可以轻松地将 Django 应用与 CAS 服务器集成,实现单点登录功能。

最后介绍一下这个Kerberos的使用方法

安装之后需要配置:需要配置Kerberos客户端,这通常涉及编辑krb5.conf文件,该文件包含了Kerberos的配置信息,如KDC服务器的地址等。

使用:

  1. 获取Kerberos票据: 使用kinit命令获取Kerberos票据。如果没有keytab文件,可以使用用户名和密码进行认证:

kinit username@REALM

          如果使用keytab文件,可以使用:

kinit -kt username.keytab username@REALM

     2.显示票据: 使用klist命令查看当前获取的Kerberos票据。

klist

     3.销毁票据: 不再需要票据时,可以使用kdestroy命令销毁它们。

kdestroy

浏览器配置: 

如果需要通过浏览器访问Kerberos保护的服务,可能还需要对浏览器进行配置,以确保它能够使用Kerberos票据进行认证。

注意事项

  • 确保Kerberos服务端(KDC)已经正确配置并且可以正常工作。
  • 在配置过程中,需要注意Kerberos域(REALM)的大小写,它们通常是大写的。
  • 如果在配置过程中遇到问题,可以查看MIT Kerberos的官方文档或社区支持。
29. Google双因素认证 

在Django项目中使用Google Authenticator进行二次验证(也称为多因素认证,MFA),可以增加账户的安全性。Google Authenticator是一个基于时间的一次性密码(TOTP)生成器,用户可以通过Google Authenticator应用程序生成密码,以验证他们的身份。

以下是在Django项目中整合Google Authenticator的一般步骤:

29.1 安装相关包

首先,你需要安装django-otpdjango-two-factor-auth,这些包可以帮助你实现多因素认证:

pip install django-otp django-two-factor-auth qrcode

29.2 配置

 在settings.py中添加必要的配置:

INSTALLED_APPS = [
    # ...
    'django_otp',
    'django_otp.plugins.otp_totp',
    'two_factor',
    # ...
]

MIDDLEWARE = [
    # ...
    'django_otp.middleware.OTPMiddleware',
    # ...
]

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'two_factor.auth_backends.MultiFactorAuthBackend',
]

29.3 URL配置

 在项目的urls.py中添加django-two-factor-auth的URL模式:

from django.urls import path, include

urlpatterns = [
    # ...
    path('accounts/', include('django.contrib.auth.urls')),
    path('accounts/', include('two_factor.urls', 'two_factor')),
    # ...
]

 29.4 迁移数据库

运行迁移命令以更新数据库:

 python manage.py migrate

29.5 模板整合

 如果需要,可以创建自定义模板并将其路径添加到settings.pyTEMPLATES配置中。

29.6 使用Google Authenticator

django-two-factor-auth会自动生成QR码,用户可以使用Google Authenticator应用扫描QR码并注册账户。之后,每次登录时,除了输入用户名和密码外,还需要输入由Google Authenticator生成的6位验证码。

从手机应用商店下载Google Authenticator或者Microsoft Authenticator;我下载的是微软的

打开之后,扫描二维码,绑定对应的网站ip,以后直接打开就是这样的,验证的时候直接输入6位验证码,过期时间非常短,只有30s左右

29.7 启动服务器

运行Django开发服务器

python manage.py runserver

注意事项:

  • 确保在部署到生产环境之前,已经正确配置了所有安全相关的设置。
  • 用户需要安装Google Authenticator应用,并能够访问生成的验证码。
  • 考虑到用户可能会丢失手机或无法访问Google Authenticator应用,建议提供备用的认证方法或恢复选项。

通过上述步骤,你可以在Django项目中启用基于Google Authenticator的多因素认证,从而提高账户的安全性。

30.使用钉钉认证

django-auth-dingding 是一个 Django 应用程序,它提供了使用钉钉账号登录 Django 应用的功能。以下是它的使用方法和一些关键特性的概述:

关键特性

  • 钉钉认证:允许用户使用钉钉账号进行认证。
  • 自定义用户模型:支持自定义用户模型。
  • 回调URL配置:需要配置钉钉应用的回调URL。
  • 环境变量:通过环境变量设置钉钉应用的密钥和回调URL。

30.1 安装 django-auth-dingding 包

pip install django-auth-dingding==0.0.3

30.2   在 INSTALLED_APPS 中添加 django_auth_dingding

INSTALLED_APPS = [
    # ...
    'django_auth_dingding',
]

30.3 在项目的 urls.py 中包含 django_auth_dingding 的 URL配置:

from django.urls import path, include

urlpatterns = [
    # ...
    path('dingding/', include("django_auth_dingding.urls")),
]

30.4   在 settings.py 中添加钉钉认证的配置:

AUTHENTICATION_BACKENDS = (
    "django_auth_dingding.auth.DingdingAuthenticationBackend",
    "django.contrib.auth.backends.ModelBackend",
)

DINGDING_AUTH_APP_KEY = "your_app_key"  # 钉钉应用的app key
DINGDING_AUTH_APP_SECRET = "your_app_secret"  # 钉钉应用的app secret
DINGDING_AUTH_AUTHENTICATION_CALLBACK_URL = "http://yourdomain.com/dingding/callback/"

30.5  如果你的用户模型是自定义的,需要在用户模型中添加 ding_user_id 字段:

from django.contrib.auth.models import AbstractUser
from django.db import models

class Users(AbstractUser):
    ding_user_id = models.CharField("钉钉UserID", max_length=64, blank=True)

30.6 运行迁移来更新数据库:

 python manage.py migrate

30.7  用户可以通过访问 http://{host}:{port}/dingding/authenticate/ 来开始钉钉认证流程

注意事项:

  • 确保你已经在钉钉开放平台上注册了应用并获取了 app key 和 app secret
  • 确保回调URL与在钉钉平台上配置的一致。
  • 如果使用自定义用户模型,请确保添加了 ding_user_id 字段。

django-auth-dingding 允许Django开发者轻松集成钉钉认证,为用户提供便捷的登录方式

最近接手的这个项目,就搞了这么多的验证方式,导致项目运行认证的时候,总是出错,有点头疼。还在一步一步排查问题解决中。由于用的前端框架也比较老,用的jquery,导致浏览器也报了一堆莫名其妙的错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1639410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c# winform快速建websocket服务器源码 wpf快速搭建websocket服务 c#简单建立websocket服务 websocket快速搭建

完整源码下载----->点击 随着互联网技术的飞速发展&#xff0c;实时交互和数据推送已成为众多应用的核心需求。传统的HTTP协议&#xff0c;基于请求-响应模型&#xff0c;无法满足现代Web应用对低延迟、双向通信的高标准要求。在此背景下&#xff0c;WebSocket协议应运而生…

C++函数重载之类型引用和类型本身

在C中&#xff0c;当我们讨论类型引用&#xff08;也称为引用类型&#xff09;与类型本身被视为“同一个特征标”&#xff08;signature&#xff09;时&#xff0c;我们实际上是在讨论引用类型在函数重载解析&#xff08;function overload resolution&#xff09;和模板参数推…

Github 2024-05-02 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10PureBasic项目1Kubernetes: 容器化应用程序管理系统 创建周期:3618 天开发语言:Go协议类型:Apache License 2.0Star数量:106913 个…

C#知识|Dictionary泛型集合的使用总结

哈喽,你好,我是雷工! 以下是C#Dictionary泛型集合的学习笔记。 01 Dictionary泛型集合 1.1、Dictionary<K,V>通常称为字典, 1.2、其中<K,V>是自定义的,用来约束集合中元素类型。 1.3、在编译时检查类型约束, 1.4、无需装箱拆箱操作, 1.5、操作与哈希表(Ha…

美国零售媒体(广告业)指南:快速增长、不断扩展的业态和新兴机遇

Guide to retail media: Rapid growth, expanding formats, and emerging opportunities --- 零售媒体如何通过CTV和其他合作伙伴关系向上发展 原文作者&#xff1a;Sara Lebow | 2024年2月16日 整理编辑&#xff1a;数字化营销工兵 I 2024年5月2日 ​​​​​​​ &#…

基于HAL库的stm32中定时器的使用--定时器中断每隔一秒进行led灯的闪烁以及定时器生成PWM

一&#xff1a;什么是定时器 &#xff08;1&#xff09;stm32定时器&#xff0c;是存在于stm32单片机中的一个外设。stm32共有八个定时器&#xff0c;两个高级定时器&#xff08;TIM1、TIM8&#xff09;&#xff0c;四个通用定时器&#xff08;TIM2、TIM3、TIM4、TIM5&#xff…

B树:原理、操作及应用

B树&#xff1a;原理、操作及应用 一、引言二、B树概述1. 定义与性质2. B树与磁盘I/O 三、B树的基本操作1. 搜索&#xff08;B-TREE-SEARCH&#xff09;2. 插入&#xff08;B-TREE-INSERT&#xff09;3. 删除&#xff08;B-TREE-DELETE&#xff09; 四、B树的C代码实现示例五、…

selenium 4.x 之验证码处理(python)

验证码处理 一般情况公司如果涉及web自动化测试需要对验证码进行处理的方式一般有一下几种&#xff1a; 关闭验证码功能&#xff08;开发处理&#xff09;设置万能验证码&#xff08;开发处理&#xff09;使用智能识别库进行验证 通过第三方打码平台识别验证码 1. 跳过验证功…

[基础] Unity Shader:顶点着色器(vert)函数

顶点着色器&#xff08;Vertex Shader&#xff09;是图形渲染的第一个阶段&#xff0c;它的输入来自于CPU。顶点着色器的处理单位是顶点&#xff0c;CPU输入进来的每个顶点都会调用一次顶点着色器函数&#xff0c;也就是我们在Shader代码里所定义的vert函数。本篇我们将会通过顶…

uniapp+vue社区车位预订租赁系统 微信小程序

本私家车位共享系统有管理员&#xff0c;用户两个角色。管理员可以对用户信息&#xff0c;车辆类型信息进行管理&#xff0c;并且可以审核用户提交的租赁订单&#xff0c;用户可以注册登录&#xff0c;新增车辆信息&#xff0c;查看车位信息并且租赁&#xff0c;并且可以支付。…

SQL 基础 | UNION 用法介绍

在SQL中&#xff0c;UNION操作符用于合并两个或多个SELECT语句的结果集&#xff0c;形成一个新的结果集。 使用UNION时&#xff0c;合并的结果集列数必须相同&#xff0c;并且列的数据类型也需要兼容。 默认情况下&#xff0c;UNION会去除重复的行&#xff0c;只保留唯一的行。…

企业计算机服务器中了lockbit勒索病毒如何处理,lockbit勒索病毒解密流程建议

在虚拟的网络世界里&#xff0c;人们利用网络获取信息的方式有很多&#xff0c;网络为众多企业提供了极大便利性&#xff0c;也大大提高了企业生产运营效率&#xff0c;方便企业开展各项工作业务。但随着网络技术的不断发展与应用&#xff0c;越来越多的企业开始关注企业网络数…

06 - metastore服务、hive服务启动脚本以及相关使用技巧

目录 1、metastore服务 1.1、metastore运行模式 1.2、metastore部署 1.3、测试 2、编写Hive服务启动脚本 3、Hive使用技巧 3.1、Hive常用交互命令 3.2、Hive参数配置方式 3.3、Hive常见属性配置 1、metastore服务 Hive的metastore服务的作用是为Hive CLI或者Hiveserv…

linux内核源码分析--核心网络文件和目录

图3-2显示了在/proc/sys中由网络代码所使用的主要目录&#xff0c;就每个目录而言&#xff0c;都列出了在哪一章描述其文件。 proc/sys/net bridge ipv4 core route neigh conf 图3-2/proc/sys/net 中的核心目录 根据前借所述&#xff0c;我们来看net中的树根是如何定义的&…

SpringCloudAlibaba:3.1dubbo

dubbo 概述 简介 Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题 官方提供了 Java、Golang、Rust 等多语言 SDK 实现 Dubbo的开源故事 最早在2008年&#xff0c;阿里巴巴就将Dubbo捐献到开源社区&#xff0c;它很快成为了国内开源…

R语言的学习—5—多元数据直观表示

1、数据读取 ## 数据整理 d3.1read.xlsx(adstats.xlsx,d3.1,rowNamesT);d3.1 #读取adstats.xlsx表格d3.1数据 barplot(apply(d3.1,1,mean)) #按行做均值条形图 barplot(apply(d3.1,1,mean),las3) barplot(apply(d3.1,2,mean)) #按列做均值图条形图 barplot(a…

JavaEE >> Spring MVC(1)

MVC MVC&#xff1a;Model View Controller 的缩写&#xff0c;是一种软件架构模式&#xff0c;将软件系统分为模型、视图和控制器三个部分。 Mode&#xff08;模型&#xff09;&#xff1a;是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据…

【C++STL详解(五)】--------list的介绍与使用

目录 前言 一、list的介绍 二、list的使用 Ⅰ.默认成员函数 1、构造函数 2、赋值重载 3、析构函数 Ⅱ、容量 1.size() Ⅲ、迭代器与遍历 1.beginend (正向迭代器) 2.rbeginrend (反向迭代器) 3.front 4.back Ⅳ、增删查改 1.push_front 2.pop_front 3.push_b…

【跟马少平老师学AI】-【神经网络是怎么实现的】(九)长短期记忆网络

一句话归纳&#xff1a; 1&#xff09;RNN也会存在梯度消失的问题。 2&#xff09;同一句话&#xff0c;对于不同的任务&#xff0c;句中不同的词起的作用也不一样。 3&#xff09;LSTM&#xff08;长短期记忆&#xff09;子网络&#xff1a; 门&#xff0c;让输入经过运算&…

目标检测算法YOLOv4简介

YOLOv4由Alexey Bochkovskiy等人于2020年提出&#xff0c;论文名为&#xff1a;《YOLOv4: Optimal Speed and Accuracy of Object Detection》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/2004.10934 &#xff0c;GitHub Code&#xff1a;https://github.com/AlexeyA…