在C#中调用django rest framework需要身份认证的api

C#桌面程序与Django通信(前后端分离机制) 实现C#桌面程序与Django通信(前后端分离机制),全部在windows下运行。如果安装了VS2015那么可以直接打开运行 立即下载

最近在项目中需要将设备的数据上传到网站,决定使用webservice。在如何调用需要身份认证的api上犯了愁,搜了无数文章都说是用Credentials,但就是不行,返回403,后来还是铁了心看官方文档,发现了问题。


#setting.py
INSTALLED_APPS = (
    #......
    'rest_framework',
)

REST_FRAMEWORK = {
     # Use hyperlinked styles by default.
    # Only used if the `serializer_class` attribute is not set on a view.
    'DEFAULT_MODEL_SERIALIZER_CLASS':
        'rest_framework.serializers.HyperlinkedModelSerializer',

    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ],

    #这里是关键
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),

    'PAGINATE_BY': 10
}

#models.py
class DeviceValue(models.Model):
    """
    Value sampled from device
    """
    sample_time = models.DateTimeField(unique=True)
    value = models.FloatField()

from django.shortcuts import render
from django.http import HttpRequest, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import action
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import AllowAny, IsAuthenticatedOrReadOnly
from models import DeviceValue
import logging
from serializers import DeviceValueSerializer
# Create your views here.

class JSONResponse(HttpResponse):
    """
    An HttpResponse that renders its content into JSON.
    """
    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs['content_type'] = 'application/json'
        super(JSONResponse, self).__init__(content, **kwargs)


class DeviceValueViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows device value to be viewed or edited.
    """
    queryset = DeviceValue.objects.all()
    serializer_class = DeviceValueSerializer
    #注意这里我将BasicAuthentication放在了SessionAuthentication前面,否则
    #会先用SessionAuthentication认证,而这会造成C#的NetworkCredentials认证失败
    authentication_classes = (BasicAuthentication, SessionAuthentication, )
    permission_classes = (IsAuthenticatedOrReadOnly,)

    @csrf_exempt
    @action(methods=['POST', ])
    def create_device_value(self, request):
        data = JSONParser().parse(request)
        serializer = DeviceValueSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JSONResponse(serializer.data, status=201, )
        return JSONResponse(serializer.errors, status=400, )

#serializers.py
from rest_framework import serializers
from models import DeviceValue


class DeviceValueSerializer(serializers.ModelSerializer):
    class Meta:
        model = DeviceValue
        fields = ('sample_time', 'value')

#urls.py
from django.conf.urls import patterns, include, url

from rest_framework import routers
from product_info import views
from django.contrib import admin
admin.autodiscover()


router = routers.DefaultRouter()
router.register(r'value', views.DeviceValueViewSet)

urlpatterns = patterns('product_info.views',
    # Examples:
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
)

C#中这样:

var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.Credentials = new NetworkCredential(user, password);
            request.ContentType = @"application/json";
            var json = "{\"sample_time\": \"2013-05-25 14:21:38+03:00\", \"value\": 20}";            
            using (var stream = new StreamWriter(request.GetRequestStream()))
            {
                stream.Write(json);
                stream.Flush();
            }
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                Debug.WriteLine(response.StatusCode);
                using (var stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    var str = stream.ReadToEnd();
                    Debug.WriteLine(str);
                }                
            }
        }


重点都注释了,希望给其它人帮助。


PS: 一直都偷懒,有问题先Google,stackoverflow,找解决方案,以后这种态度要改,有时间的情况下还是要先浏览一下官方文档。

如何用Python编程实现算术割圆术? 第10章 割圆术 Python编程要点 from … import …语句 math模块的sqrt()函数 round()函数 10.1 图解九章 {:–}觚( gū ):正多边形。“六觚”即正六边形,“十二觚”即正十二边形。 图10-1 六觚、十二觚、二十四觚 提示 图10-1所示由图解九章源码中的“图解割圆术.py”自动绘制而成,我们可运行脚本文件,查看动态的绘制过程。 割六觚以... 阅读详情

相关推荐

Cadence学习之路:什么是PCB工艺的正片与负片

正片??负片??Flash焊盘的创建与使用

qq_46757048的博客 4245

c# 富文本编辑器图片粘贴上传处理_配置DjangoTinyMCE组件 实现上传图片功能

Django自带的Admin后台,好用,TinyMCE作为富文本编辑器,也蛮好用的,这两者结合起来在做博客的时候很方便(当然博客可能更适合用Markdown来写),但是Django-TinyMCE这个组件默认没有图片上传功能的,需要我们自己实现,本文将一步步带大家实现这个图片上传功能。读者也可以举一反三实现其他需要和Django结合的功能。编写上传图片逻辑在任一views.py里添加代码...

weixin_39805255的博客 357

映泰TB250-BTC主板魔改BIOS支持8/9代CPU实战与开机故障排查

BIOS(基本输入输出系统)是计算机硬件与操作系统之间的桥梁,负责初始化硬件和提供运行时服务。其工作原理是通过存储在主板芯片中的固件程序,在上电自检(POST)阶段完成对CPU、内存等关键组件的检测与配置。魔改BIOS的技术价值在于突破硬件限制,通过修改微码和电源管理模块,让旧平台支持新处理器,从而以极低成本实现性能跃升,在预算有限或追求极致性价比的DIY、办公和软路由等应用场景中极具吸引力。本文以映泰TB250-BTC矿板为例,详细解析了通过软刷方式刷入魔改BIOS,并重点解决了刷写后常见的“开机风扇转一

weixin_29164185的博客 410

Django--权限Permissions

权限全局配置: REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ) } 权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。 在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过ge...

gy的博客 2993

ExcelVBA批量添加PDF文件

如图1所示,"BOM-01.xlsx"工作簿中的Sheet1工作表根据B列图号单元格中的内容,在图2所示的文件夹中找到对应的PDF文件,然后嵌入到相应的N列,双击N列中所示的图标,会打开PDF文件,是源文件的副本,即删除源文件,也可以打开N列的文件。 图1 根据B列的图号在N列嵌入对应的PDF文件 图2 PDF文件 图3 文件格式 Sub 导入文件() Ap...

qq389445046的博客 5579

Carla-编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?

编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?不妨看看这个!

DSK_981029的博客 2573

DRF学习——权限组件(一)

本篇文章主要介绍权限组件的快速使用,并从源码角度分析drf权限组件的调用过程。

Hemameba的博客 821

数据分析(二):学生成绩预测分析报告

表1 特征变量描述变量描述school学生的学校sex学生的性别age学生的年龄address学生的家庭住址类型famsize家庭规模Pstatus父母同居状况Medu母亲的教育Fedu父亲的教育Mjob母亲的工作Fjob父亲的工作reason选择学校的理由guardian学生监护人traveltime从家到学校的时间studytime每周学习时间failures过去的类失败次数schoolsup额外的教育支持famsup家庭教育支持。

m0_73963149的博客 4417

Django web 服务器(Restful API 前后端分离风格) 与 C#桌面应用程序(WinForm)交互(基于windows平台开发,附代码下载)

一. 开发背景 最近单位一个项目,我正在做产品原型,主要是开发一个web应用能够让用户上传个人信息,包括姓名、出生年月之类的,其中尤其是需要上传用户的个人照片(照片格式可能要200k左右),然后还要开发一个桌面应用需要与web服务器通信,获取用户上传的数据然后再进行处理。这里说明下,之所以不做成全web的应用而额外需要开发一个桌面应用程序的原因是:获取到用户信息后需要采用特定的设备进行打印(不是...

你是怎么做到的?我为什么做不到 4358

华为OD机试双机位C卷-FLASH坏块监测系统(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【FLASH坏块监测系统】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - FLASH坏块监测系统。

qq_45776114的博客 1928

【EB-02】TC397 Tresos 最小工程配置

主要设置McalLibPublishedInformation 参数,会根据ResourceM配置的芯片自动加载。可以看到再工程目录中生成了output文件夹,里面由这些模块生成的头文件,编译脚本和epc文件。如果选择生成swcd,可以生成xxx_Bswmd.arxml给别的工具使用。如果没有Error和Problems就可以点击生成代码。点击工程校验看看工程是否由错误。

libuping2023的博客 328

基于Django与微信小程序的全栈健康管理系统开发实战

在Web应用开发领域,前后端分离架构已成为主流范式,其核心在于通过API接口实现数据交互。Django作为Python生态中成熟的后端框架,凭借其开箱即用的ORM、Admin后台和强大的Django REST Framework(DRF),能够高效构建稳定、安全的RESTful API服务。微信小程序则以其庞大的用户基础和接近原生的体验,成为轻量级前端应用的理想选择。将两者结合,能够快速搭建具备完整业务逻辑和数据管理能力的全栈应用,其技术价值在于实现了从数据建模、业务逻辑处理到用户界面交互的完整闭环。这种技

weixin_33895475的博客 351

[ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042

[ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042 Django 组件存在 SQL 注入漏洞,该漏洞是由于对 QuerySet.order_by()中用户提供数据的过滤不足,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行 SQL 注入攻击,最终造成服务器敏感信息泄露。

qq_51577576的博客 3228

Python框架如何实现认证、权限与限流功能?

鉴权开发框架还具有高度的可扩展性和灵活性。开发者可以根据实际需求,选择不同的鉴权策略和安全机制,如OAuth2.0、JWT、SAML等。同时,鉴权开发框架还支持分布式部署和集群部署,可以满足大规模、高并发的业务场景。

编程小风筝的博客 951

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JWT使用

1.1 安装jwt模块并创建用户APP # 安装: pip install djangorestframework-jwt # 添加应用:python manage.py users 1.2 配置settings.py ########### 1、在INSTALLED_APPS中加入'rest_framework.authtoken', ################# INSTALLED_A...

小明同学的博客 338

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

认证与授权,JWT 认证

session_key会保存在服务端,有可能是保存在mysql,有可能是保存在redis,服务端会把这个session_key发送给浏览器客户端,下次来自客户端的请求就会带上这个session_key,服务端校验这个key是否存在,并且是否过期,以判断是否认证通过.obtain_jwt_token生成获取token。refresh_jwt_token刷新token。verify_jwt_token校验token。6.4.3全局路由表中注册路由obtain_jwt_token。......

qq_40132294的博客 1006

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

从Django到SpringBoot:学生图书管理系统全栈开发实战与多技术栈对比

Web全栈开发的核心在于理解如何将业务需求转化为可落地的技术方案。其基本原理通常围绕MVC(模型-视图-控制器)或类似分层架构展开,通过清晰的数据流和模块化设计,实现应用的高内聚、低耦合。从技术价值看,掌握全栈能力能显著提升开发效率、系统可维护性及多端适配的灵活性。在实际应用场景中,像学生图书管理系统这类典型的CRUD应用,就非常适合作为全栈技术的实践载体。本文以Django和SpringBoot为核心,深入剖析了如何构建一个完整的图书管理系统,并横向对比了包括微信小程序、安卓APP在内的多端实现方案。通过

weixin_34293911的博客 450

django郑州市旅游推荐系统77711 计算机课程设计/毕业设计

系统支持用户实名注册、多角色权限管理(游客、旅游商家、管理员)、旅游资源审核、订单处理及公告发布;前端基于 Vue.js 开发响应式用户界面,提供景点、酒店、美食等资源的一站式查询与多条件筛选,结合用户偏好(如历史文化游、亲子游、美食游)实现个性化推荐与动态行程规划,并集成在线预订、退订及订单评价功能。

Biye_Design的博客 430

django大学生实习管理系统97833-计算机课程设计、毕业设计

本文设计并实现了一个大学生实习管理系统。系统前端采用Vue.js框架构建交互式用户界面,后端依托Django框架处理业务逻辑与数据接口,MySQL数据库用于存储和管理结构化数据。系统面向学生、企业与管理员三类角色提供相应功能:学生可完成岗位浏览、简历投递、任务提交、考勤打卡及实习日志记录;企业可发布岗位、查看投递情况、安排面试并反馈评价;管理员则可统一维护用户信息与系统内容,并通过饼状图、柱状图和折线图等形式,对岗位发布数量、岗位投递量、筛选通过率、实习时长分布、报告提交率、考勤达标率等核心指标进行可视化统

Biye_Design的博客 358

关于路由集合的使用

视图集视图集 使用视图集视图集,可以将一系列逻辑相关的动作放到一个类中: list()提供一组数据 retrieve()提供单个数据 create()创建数据 update()保存数据 destory()删除数据 ViewSet视图集类不再实现get(),post()等方法,而是实现动作action如list(),create()等。 视图集只在使用as_view()方法的...

weixin_30656145的博客 196

JWT验证机制

一、JWT: 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用Json Web Token认证机制。1.什么是JWT: Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录...

weixin_30361753的博客 585

Claude Code技能筛选实战:6个核心AI编程助手提升开发效率

AI编程助手正成为开发者提升生产力的重要工具,其核心原理是通过大语言模型理解代码上下文,自动完成代码生成、审查、调试等任务。这类工具的技术价值在于减少重复劳动,降低上下文切换成本,将开发者从繁琐的样板代码和错误排查中解放出来,从而更专注于核心业务逻辑与架构设计。在实际应用场景中,开发者常面临工具泛滥导致的效率悖论——技能安装过多反而增加选择负担。本文以Claude Code的Skill市场为例,聚焦于解决特定领域痛点的实战筛选。通过分析代码审查、SQL查询生成、API端点设计等高频需求,最终提炼出6个覆盖9

weixin_30307921的博客 772

restframework(6):权限组件

restframework(6):权限权限简介权限说明权限要求restframework中的权限权限简单实例文本样式列表链接代码片 权限简介 权限说明 权限是针对某种对象的全局性的设置,而不是针对某种对象的某个特定实例的。例如,我们可以说“玛丽可以改写故事”,但是不能说“玛丽可以改写故事,但只限于她自己的故事”,也不能说“玛丽只能改写符合特定条件(如出版日期、编号)的故事”。后面的两种情况是 D...

submarineas的博客 864

Django 权限Permissions python

权限全局配置: REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ) } 权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。 在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object()获取具体对象时,会进行对象访问权限的判断 如果不指定就用默认的配置: 'DEFAULT_PERM...

你的才华撑不起野心时,静下心学习;你的能力驾驭不了目标时,沉下心努力 1188

ashx(c#)远程获取django网站中的静态资源时遇到的大坑

之前用c#编写过一个处理图像的api接口,需要开始的时候将远程图片抓取到本地再进行下一步操作。本来这个从远程抓取图片的功能一直都是好用的,结果这两天从本人的另一个django网站中读取图片遇到了麻烦。虽然这个问题很容易解决,但是足足用了我两天时间才解决。废话不多说,先上c#抓取图片的代码: 参数为远程图片url和本地存放的地址(savePath)。 public bool downloadFile(string url, string savePath) { Ht...

280

C# ASP.NET CORE发送请求接收Python Django接口的Json数据并返回

代码: #region 获取Python平台数据 [HttpGet] public IActionResult GetPython() { string url = "http://127.0.0.1:8000/blog/get_blogs"; HttpWebRequest request = (H...

大脸猫的博客 1473
上一篇: STA线程模型中操纵串口的注意点
下一篇: 为Joomla 2.5的连续插入多幅图像增加便捷方式
thy38
博客等级 码龄19年 184粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值