建设公司需要网站吗建设网站价格
- 作者: 五速梦信息网
- 时间: 2026年04月20日 10:46
当前位置: 首页 > news >正文
建设公司需要网站吗,建设网站价格,深圳正规网站开发团队,id如何打开wordpress一、 准备工作 为了讲清楚身份验证与权限#xff0c;我们再创建一个应用projects,设计模型如下#xff1a; class Project(models.Model):name models.CharField(项目名称, max_length20, help_text项目名称)desc models.CharField(项目描述, max_length200, help_text项目…一、 准备工作 为了讲清楚身份验证与权限我们再创建一个应用projects,设计模型如下 class Project(models.Model):name models.CharField(项目名称, max_length20, help_text项目名称)desc models.CharField(项目描述, max_length200, help_text项目描述, nullTrue, blankTrue)leader models.ForeignKey(auth.User, verbose_name项目负责人, on_deletemodels.SET_NULL, nullTrue, help_text项目负责人)c_time models.DateTimeField(创建时间, auto_now_addTrue) 编写序列化器 from rest_framework import serializers from .models import Projectclass ProjectSerializer(serializers.ModelSerializer):class Meta:model Projectfields all 编写视图集 class ProjectViewSet(ModelViewSet):queryset Project.objects.all()serializer_class ProjectSerializer 配置url router DefaultRouter() router.register(rprojects, views.ProjectViewSet) urlpatterns […path(, include(router.urls)) ] 目前我们的API对谁可以编辑或删除项目没有任何限制。我们希望有一些更高级的行为以确保: 项目总是与创建者相关联。只有经过身份验证的用户才能创建项目。只有项目的创建者才能更新或删除它。未经身份验证的请求应该具有完全只读访问权限。创建用户方法一 我们需要先创建一个超级管理员。不然我们项目Project模型中leader外键关联的auth.User表没有数据创建Project的时候选不到数据。
创建超级管理员
python manage.py createsuperuser创建用户方法二 有了超级用户可以访问网址去创建输入你刚才创建的超级管理员 因为考虑后面需要测普通管理员的权限我们去把其中一个超级管理员的权限卸掉。 此时我们去创建一个项目负责人为test的项目。 因为我们登录着所以我们可视化api右上角才显示登录的状态。 这个时候我们访问 http://127.0.0.1:8000/admin/auth/user/ 退出登录再看下drf可视化的api右上角就不展示登录的用户名。 此时就是一个匿名的状态。 那么此时我去做修改或者添加的操作能执行成功吗当然可以。 因为你当前写的跟用户权限没有任何关系谁都可以去操作修改、删除、添加等一系列的操作。 那么我们现在就要做2件事情
- 谁创建这个项目这个项目就跟谁关联好比我去超市买东西扣的是我的钱而不是别人的钱。
- 登录后方有权限去创建、修改删除等一系列操作。 二、关联项目与用户 现在我们可以创建项目并手动选择对应的用户与项目进行关联。但是在某些场景下这可能不是你想要的比如谁创建项目就把谁与创建的项目进行关联。 那么用户就不能再作为序列化表示的一部分发送而是传入请求的一个属性。django会将当前用户对象设置到request.user属性上它是在中间件AuthenticationMiddleware中完成的。 我们首先修改项目的序列化器将leader字段修改为只读并显示用户的用户名。 方法一 leader serializers.ReadOnlyField(sourceleader.username) source参数控制哪个属性用于填充字段并可以指向序列化实例上的任何属性。它也可以采用上面所示的句点符 在这种情况下它将遍历给定的属性 与Django的模板语言使用的方式类似。 ReadOnlyField始终是只读的并将用于序列化表示但当模型实例被反序列化时将不会用于更新它们。 方法二 然后再重写项目视图上的perform_create()方法修改保存实例保存的方式处理隐式传入请求或者请求URL中的任何信息这里我们给项目关联当前用户。 在ProjectViewSet视图集上添加以下方法: def perform_create(self, serializer):serializer.save(leaderself.request.user) 三、添加登录功能 此时创建项目你会发现报错这是因为django在未做身份验证的请求的user属性上绑定了一个AnonymousUser对象。我们需要能够以用户身份登录。 通过编辑根urls.py文件中的URLconf我们可以添加一个login视图来与可浏览的API一起使用。 在文件的末尾添加一个模式以包含可浏览API的登录和注销视图。 urlpatterns [path(auth/, include(rest_framework.urls)), ] 模式的auth/部分实际上可以是你想使用的任何URL。 现在如果你再次打开浏览器并刷新页面你会在页面的右上角看到一个“Login”链接。登录之前创建的用户你将能够再次创建项目。 四、向视图添加权限 现在我们希望确保只有经过身份验证的用户才能创建、更新和删除项目。REST框架包括许多权限类我们可以使用它们来限制谁可以访问给定的视图。在这个例子中我们要找的是IsAuthenticatedOrReadOnly这将确保经过身份验证的请求获得读写访问权限而未经身份验证的请求获得只读访问权限。 首先在views模块中添加以下导入 from rest_framework import permissions 然后将下列属性添加到ProjectListCreateView和ProjectDetailUpdateDeleteView视图类中。 permission_classes [permissions.IsAuthenticatedOrReadOnly] 现在退出登录你会发现在项目列表页面的POST请求表单不见了项目详情页的update,put按钮也看不见了。 五、对象级权限 再创建一个用户并登录你会发现可以对前面用户创建的项目进行编辑。 实际上我们希望所有项目对任何人都可见但也要确保只有创建了项目的用户才能更新或删除它。 为此我们需要创建一个自定义的权限。 在projects应用程序中创建一个新文件permissions.py编写如下代码咋知道咋写的去看下别人封装好的权限是咋写的 from rest_framework import permissionsclass IsOwnerOrReadOnly(permissions.BasePermission):自定义权限只允许对象的leader才能编辑它def has_object_permission(self, request, view, obj):if request.method in permissions.SAFE_METHODS:return Truereturn obj.leader request.user 将它添加到ProjectDetailUpdateDeleteView视图上 permission_classes [permissions.IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly] 现在再次打开浏览器你会发现只有当登录用户与当前代码片段的创建用户相同时DELETE和PUT按钮才会出现在页面上。 六、身份验证 身份验证是将传入请求与一组识别凭证相关联的机制例如请求携带的用户名密码签名令牌等。然后权限之类的限制策略才可以使用这些凭证来确定是否应该允许请求。 身份验证始终在视图的最开始运行在权限和限制检查发生之前在任何其他代码被允许继续之前。 REST框架提供多种开箱即用的身份验证方案后面项目实战时我们再讨论。 七、权限验证 与身份验证限流一起权限决定是否应该授予或拒绝访问请求。 权限检查总是在视图的最开始运行在任何其他代码被允许继续之前。权限检查通常会使用request.user和request.auth属性中的身份验证信息来确定是否应允许传入请求。 权限用于授予或拒绝不同类别的用户访问 API 的不同部分。 最简单的权限样式是允许任何经过身份验证的用户访问而拒绝任何未经身份验证的用户访问。 八、如何确定权限 DRF中权限始终定义为权限列表。在运行视图的主体之前检查列表中的每个权限。如果任何权限检查失败将引发exceptions.PermissionDeniedorexceptions.NotAuthenticated异常并且视图的主体将不会运行。当权限检查失败时将根据以下规则返回“403 Forbidden”或“401 Unauthorized”响应 请求已成功验证但权限被拒绝。— 将返回 HTTP 403 Forbidden 响应。请求未成功通过身份验证最高优先级的身份验证类不使用WWW-Authenticate标头。— 将返回 HTTP 403 Forbidden 响应。请求的身份验证没有成功并且最高优先级的身份验证类确实使用了WWW-Authenticate头。一个HTTP 401未经授权的响应将返回一个适当的WWW-Authenticate报头。九、对象级权限 REST 框架权限还支持对象级权限。对象级权限用于确定是否应允许用户对特定对象进行操作该对象通常是模型实例。 对象级权限由REST框架的通用视图调用.get_object时运行。与视图级别权限一样也有例外。如果不允许用户对给定对象进行操作则会引发PermissionDenied异常。 如果您正在编写自己的视图并希望强制执行对象级权限或者覆盖了通用视图上的get_object方法那么您需要在视图方法中显示的调用.check_object_permissions(request, obj) 十、设置权限策略 可以使用设置全局设置默认权限策略DEFAULT_PERMISSION_CLASSES。例如。 REST_FRAMEWORK {DEFAULT_PERMISSION_CLASSES: [rest_framework.permissions.IsAuthenticated,] } 如果未指定此设置默认为允许不受限制的访问 DEFAULT_PERMISSION_CLASSES: [rest_framework.permissions.AllowAny, ] 您还可以使用基于APIView类的视图在每个视图或每个视图集的基础上设置权限策略 from rest_framework.permissions import IsAuthenticated from rest_framework.views import APIViewclass ExampleView(APIView):permission_classes [IsAuthenticated] 或者使用基于装饰器api_view的函数视图 from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import IsAuthenticatedapi_view([GET]) permission_classes([IsAuthenticated]) def example_view(request, formatNone):pass 注意直接在视图上设置权限类列表后会忽略设置文件中配置的权限类列表。 十一、内置权限 AllowAny IsAuthenticated IsAdminUser IsAuthenticatedOrReadOnly 十二、自定义权限 要实现自定义权限请重写BasePermission并实现以下方法中的一个或两个: ●.has_permission(self, request, view) ●.has_object_permission(self, request, view, obj) 如果请求被授予访问权限则该方法应返回True否则返回False。 注意对象级的has_object_permission方法只有在视图级的has_permission检查已经通过的情况下才会被调用。 如果测试失败自定义权限将引发一个PermissionDenied异常。若要更改与异常关联的错误消息请在自定义权限上直接实现message属性。否则将使用PermissionDenied的default_detail属性。类似地要更改与异常相关的代码标识符请直接在自定义权限上实现一个code属性——否则将使用PermissionDenied的default_code属性。 from rest_framework import permissionsclass CustomerAccessPermission(permissions.BasePermission):message Adding customers not allowed.def has_permission(self, request, view):…
- 上一篇: 建设公司网站源码太原推广型网站制作
- 下一篇: 建设公司宣传网站做简历的网站viso
相关文章
-
建设公司网站源码太原推广型网站制作
建设公司网站源码太原推广型网站制作
- 技术栈
- 2026年04月20日
-
建设公司网站模板下载wordpress.php扩张
建设公司网站模板下载wordpress.php扩张
- 技术栈
- 2026年04月20日
-
建设公司网站广告语软件开发工具简称
建设公司网站广告语软件开发工具简称
- 技术栈
- 2026年04月20日
-
建设公司宣传网站做简历的网站viso
建设公司宣传网站做简历的网站viso
- 技术栈
- 2026年04月20日
-
建设公益网站多少钱php毕业设计代做网站
建设公益网站多少钱php毕业设计代做网站
- 技术栈
- 2026年04月20日
-
建设购物网站需要多少费用自媒体平台排名前十
建设购物网站需要多少费用自媒体平台排名前十
- 技术栈
- 2026年04月20日
