小编yao*_*bin的帖子

如何在django-rest-framework中使用TokenAuthentication for API

我有一个django项目,使用django-rest-framework来创建api.

想要使用令牌基础认证系统,因此api调用(put,post,delete)只会为授权用户执行.

我安装了'rest_framework.authtoken'并为每个用户创建了令牌.

所以,现在从django.contrib.auth.backends身份验证,它返回用户,auth_token作为属性.(成功时).

现在我的问题是如何将带有post请求的令牌发送到我的api和api端如何验证令牌是否有效并且属于正确的用户?

app rest_framework.authtoken中是否有任何方法可以验证给定用户及其令牌?没发现这个非常有用!

更新(我做的更改):在我的settings.py中添加了这个:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}
Run Code Online (Sandbox Code Playgroud)

还在我的标题中发送令牌,但它仍然无法正常工作:

if new_form.is_valid:
    payload= {"createNewUser":
              { "users": request.POST["newusers"],
                "email": request.POST["newemail"]
                }
              }

    headers =  {'content-type' : 'application/json', 
                'Authorization': 'Token 6b929e47f278068fe6ac8235cda09707a3aa7ba1'}

    r = requests.post('http://localhost:8000/api/v1.0/user_list',
                      data=json.dumps(payload),
                      headers=headers, verify=False)
Run Code Online (Sandbox Code Playgroud)

python django django-authentication django-rest-framework

31
推荐指数
1
解决办法
3万
查看次数

在Android手机的"设置" - >"选择区域设置"中添加/删除语言条目

我的问题:

如何在源代码级别的Android手机的"设置" - >"语言和键盘设置" - >"选择区域设置"(或"选择语言")中添加或删除语言条目?

我会提供更多关于我想要什么以及我做了什么的细节. 如果我提出任何愚蠢的理解或信息,请原谅.我对Android开发很陌生,几天前开始学习它.还有很多我不知道的事情.

更多关于我想要的信息:

我最近正致力于使用新语言本地化整个手机产品(我的意思是,我不是在处理特定的应用程序.这就是为什么我需要在"设置"中添加新的区域设置).当我拿到开发电话时,我发现"选择区域设置" 中只有几个语言条目,例如"英语","法语"和"西班牙语".首先,我需要在此列表中添加并显示一些新的语言条目,例如"日语","中文","韩语".

我拥有Android平台的所有源代码和我自己的代码,所以我认为这个任务可以通过在某处修改源代码或资源文件来完成.不幸的是,我不知道代码和文件在哪里.

" Hello,L10N "教程显示了一种在运行时从"自定义区域设置"添加新区域设置的方法.但我想要的是在构建时添加新的语言环境,这样当手机启动时,新的语言环境将直接显示在"选择语言环境"中而无需任何其他操作.

我做了什么:

在我来之前,我在互联网上做了很多研究.这是我发现的:

  1. Stackoverflow中的Sinkiru询问了一个关于我正在寻找什么的问题.在这里看到它.然而,没有其他人回复他.他自己的回复只告诉在哪里查询CURRENT语言设置,这不是我想要的.我亲自给他发了一封电子邮件,但没有得到他的答复.

  2. 我在Stackoverflow中搜索了很多关键字"android locale","android language","android new locale"等等.本网站中的大多数问题都是询问如何更改应用的区域设置,如何为应用添加多语言支持等等.它们不是我想要的.

  3. 我在Android平台Google小组(http://groups.google.com/group/android-platform)中搜索了很多.有些人在问我的问题,但在阅读完这些消息之后,我仍然没有得到我的答案.. :-(这是我在小组中读到的帖子列表(我没有得到我想要的内容) :

  4. 返回上面列出的条目"(a)".在"操作系统本地化"消息主题中,Android框架工程师Dianne Hackborn说: …

settings android locale

30
推荐指数
1
解决办法
3万
查看次数

在Python中,为什么'r +'而不是'rw'用来表示"读写"?

在Python中,打开文件时,我们使用'r'指示只读和只'w'写.然后我们'r+'用来表示"读写".

为什么不用'rw'?没有'rw'看上去比更自然'r+'


1月25日编辑:

呵呵..我想我的问题看起来有点混乱..我试图问的是:'r'是的"读"的第一个字母'w'的"写",因此第一个字母'r''w'看起来自然映射到"读"和"写".但是,当涉及到"读写"时,Python使用'r +'代替'rw'.

所以问题实际上是关于命名原理而不是它们之间的行为差​​异.

python

20
推荐指数
1
解决办法
6037
查看次数

来自libstdc ++的std :: string :: assign()方法中的奇怪的SIGSEGV分段错误.so.6

我的程序最近在运行时遇到了一个奇怪的段错误. 我想知道是否有人之前遇到过这个错误以及如何修复它. 这是更多信息:

基础信息:

  • CentOS 5.2,核心版本为2.6.18
  • g ++(GCC)4.1.2 20080704(Red Hat 4.1.2-50)
  • CPU:Intel x86系列
  • 的libstdc ++.so.6.0.8
  • 我的程序将启动多个线程来处理数据.段错误发生在其中一个线程中.
  • 虽然它是一个多线程程序,但segfault似乎发生在本地std :: string对象上.我稍后会在代码片段中显示此内容.
  • 该程序使用-g,-Wall和-fPIC编译,没有-O2或其他优化选项.

核心转储信息:

Core was generated by `./myprog'.
Program terminated with signal 11, Segmentation fault.
#0  0x06f6d919 in __gnu_cxx::__exchange_and_add(int volatile*, int) () from /usr/lib/libstdc++.so.6
(gdb) bt
#0  0x06f6d919 in __gnu_cxx::__exchange_and_add(int volatile*, int) () from /usr/lib/libstdc++.so.6
#1  0x06f507c3 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/libstdc++.so.6
#2  0x06f50834 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from …
Run Code Online (Sandbox Code Playgroud)

linux string segmentation-fault assign

17
推荐指数
1
解决办法
2万
查看次数

如何调试Selenium WebDriver操作?

我正在使用Selenium WebDriver并遇到问题.

在UI中,WebDriver可以看到元素,但无法执行任何操作,例如click,type,select等.元素由selenium找到并作为webelement的实例返回.我可以得到,getText(),isEnabled()等,但不会执行任何操作.没有例外.它只是挂起.

我不明白这种行为.如果WebDriver看到它,它应该单击.我尝试过使用动作.这也表现出相同的行为.

如何调试此问题?有任何想法吗?

webdriver selenium-webdriver

9
推荐指数
1
解决办法
2万
查看次数

为什么我的程序在堆栈上限为10MB时分配11MB字符串数组时不会溢出堆栈?

我有两个简单的C++程序和两个问题.我在CentOS 5.2工作,我的开发环境如下:

  • g ++(GCC)4.1.2 20080704(Red Hat 4.1.2-50)
  • "ulimit -s"输出:10240(千字节),即10MB

计划#1:

main.cpp中:

int main(int argc, char * argv[])
{
    char buf[1024*1024*11] = {0};
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(用"g ++ -g main.cpp"编译)

程序在堆栈上分配1024*1024*11字节(即11MB),但不会崩溃.将分配大小更改为1024*1024*12(即12MB)后,程序崩溃.我认为这应该是由堆栈溢出引起的. 但是为什么程序在分配大小为11MB时不会崩溃,这也大于10MB的上限?

计划#2:

main.cpp中:

#include <iostream>

int main(int argc, char * argv[])
{
    char buf[1024*1024*11] = {0};

    std::cout << "*** separation ***" << std::endl;

    char buf2[1024*1024] = {0};

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(用"g ++ -g main.cpp"编译)

该程序将导致程序崩溃,因为它在堆栈上分配12MB字节.但是,根据核心转储文件(见下文),崩溃发生在buf但不是buf2. 不应该崩溃发生在buf2上,因为我们从程序#1知道char buf [1024*1024*11]的分配是正常的,因此在我们分配另一个1024*1024字节后,堆栈会溢出吗?

我认为必须有一些非常基本的概念,我没有建立一个坚实的理解.但是他们是什么?

附录:程序#2生成的核心转储信息:

Core was generated by `./a.out'.
Program terminated with signal …
Run Code Online (Sandbox Code Playgroud)

c linux stack-overflow callstack

8
推荐指数
2
解决办法
582
查看次数

您在软件中编写日志以处理可能的大量日志消息的策略是什么?

感谢您的宝贵时间,感谢抱歉!

我的工作环境

Linux C/C++(但我是Linux平台的新手)

我的问题简单

在我正在处理的软件中,我们将大量日志消息写入本地文件,这使得文件大小快速增长并最终耗尽所有磁盘空间(哎哟!).我们希望这些日志消息用于故障排除,特别是在软件发布到客户站点之后.我认为占用客户计算机的所有磁盘空间当然是不可接受的,但我不知道如何处理这个问题.所以我想知道是否有人在这里有任何好主意.更多信息如下.

我不是在问什么

1).我不是要求推荐的C++日志库.我们自己写了一个记录器.

2).我不是在询问应该在日志消息中写入什么细节(例如时间戳,线程ID,函数名称等).一些建议可以在这里找到.

我在我的软件中做了什么

我将日志消息分为3类:

  • SYSTEM:仅记录我软件中的重要步骤.示例:外部调用我的软件的接口方法.背后的想法是从这些消息我们可以看到软件中通常发生的事情.有没有很多这样的消息.

  • 错误:仅记录错误情况,例如找不到ID.通常没有太多这样的消息.

  • 信息:记录我的软件中运行的详细步骤.例如,当调用接口方法时,如上所述编写SYSTEM日志消息,并且将使用INFO消息记录接口方法内的内部模块中整个调用例程.背后的想法是这些消息可以帮助我们识别详细的调用堆栈以进行故障排除或调试.这是耗尽磁盘空间问题根源:当软件正常运行时,总会有SO MANY INFO消息.

我的尝试和想法

1).我试图不记录任何INFO日志消息. 这解决了磁盘空间问题,但我也失去了很多调试信息. 想一想:我的客户在不同的城市,经常去那里很贵.此外,他们使用的是一个100%无法从外部访问的内部网.因此:我们不能总是在遇到问题时立即派遣工程师到现场; 我们无法启动远程调试会话.因此,我认为日志文件是我们可以用来找出问题根源的唯一方法.

2).也许我可以在运行时使日志记录策略可配置(目前它在软件运行之前),即:在正常运行时,软件只记录SYSTEM和ERROR日志; 当出现问题时,有人可以更改日志记录配置,以便记录INFO消息.但仍然是:谁可以在运行时更改配置?也许我们应该教育软件管理员?

3).也许我总是可以将INFO消息登录,但是会定期将日志文件打包到压缩包中? 嗯...

最后...

您在项目/工作中的经历是什么?欢迎任何想法/想法/意见!

编辑

感谢您的所有努力!以下是所有回复中关键点的摘要(我会试一试):

1).不要使用大型日志文件.使用相对较小的.

2).定期处理最老的(删除它们或压缩并将它们放到更大的存储空间中).

3).实现运行时可配置的日志记录策略.

c++ linux logging

7
推荐指数
2
解决办法
2080
查看次数

我应该如何正确使用g ++的-finput-charset编译器选项来编译非UTF-8源文件?

我正在尝试使用-finput-charset编译器选项在g ++中编译UTF-16BE C++源文件,但我总是遇到一堆错误.更多细节如下.

我的环境(在CentOS Linux中):

  • g ++:4.1.2
  • iconv:2.5
  • Linux语言(在终端中):LANG ="en_US.UTF-8"

我的示例源文件(以UTF-16BE编码存储):

// main.cpp:

#include <iostream>

int main()
{
    std::cout << "Hello, UTF-16" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的步骤:

  • 我阅读了关于-finput-charset选项的g ++手册. g ++手册说:

-finput-charset = charset 设置输入字符集,用于从输入文件的字符集转换为GCC使用的源字符集.如果区域设置未指定,或GCC无法从区域设置获取此信息,则默认值为UTF-8.这可以通过语言环境或此命令行选项覆盖.目前,如果存在冲突,命令行选项优先.charset可以是系统的" iconv "库例程支持的任何编码.

  • 因此我按如下方式输入命令:

g ++ -finput-charset = UTF-16BE main.cpp

我收到了这些错误:

在main.cpp中包含的文件中:1:

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iostream:1:error:stray'\ 342'in program

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iostream:1:error:stray'\ 274'in program

...(反复,很多,大约4000 +)......

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iostream:1:错误:stray'\ 257'在程序中

main.cpp:在函数'int main()'中:

main.cpp:5:错误:'cout'不是'std'的成员

main.cpp:5:错误:'endl'不是'std'的成员

  • 手册文本表明charset可以是'iconv'例程支持的任何编码,因此我猜测编译错误可能是由我的iconv库引起的.然后我测试了iconv:

iconv --from-code = UTF-16BE --to-code = UTF-8 --output = main_utf8.cpp main.cpp

按预期生成"main_utf8.cpp"文件.然后我尝试编译它:

g ++ -finput-charset = …

c++ gcc g++ character-encoding

7
推荐指数
1
解决办法
9200
查看次数

Python:如果在try或if中定义,变量仍然可以访问?

我是Python初学者,我来自C/C++背景.我正在使用Python 2.7.

我读了这篇文章:Python的命名空间,范​​围解析和LEGB规则的初学者指南,我想我对Python的这些技术有一些了解.

今天我意识到我可以像这样编写Python代码:

if condition_1:
    var_x = some_value
else:
    var_x = another_value
print var_x
Run Code Online (Sandbox Code Playgroud)

也就是说,var_x仍然可以访问,即使它没有 if 之前定义.因为我来自C/C++背景,这对我来说是新的,就像在C/C++中一样,var_x在if和else包含的范围内定义,因此除非你var_x之前定义,否则你不能再访问它了if.

我试图在Google上搜索答案,但因为我还不熟悉Python,我甚至不知道从哪里开始以及我应该使用哪些关键字.

我的猜测是,在Python中,if不会创建新范围.新定义的所有变量都位于所驻留if的范围内,if这就是变量在之后仍可访问的原因if.但是,如果var_x在上面的示例中仅定义了if但不在其中else,则将发出警告以说明print var_x可能引用可能未定义的变量.

我对自己的理解有信心.但是,如果我在某个地方出错了,有人可以帮我纠正,或者给我一个关于这个问题的文件链接吗?

谢谢.

python scope

7
推荐指数
1
解决办法
160
查看次数

在我的 Docker 容器中,为什么我在没有 NET_BIND_SERVICE 功能的情况下仍然可以绑定端口 1?

我在用着Ubuntu 18.04 Desktop。以下是有关我的问题的更多详细信息。

最近,我正在编写一些想要执行此操作的测试代码:当它作为非特权用户运行时,测试代码尝试绑定特权端口(在我的例子中为端口 1)并期望绑定失败。

在我的主机上,我当前的非特权用户有以下capsh --print输出:

Current: =
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=1000(ywen)
gid=1000(ywen)
groups=4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),999(docker),1000(ywen)
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试使用当前非特权用户绑定端口 1 时,我可以得到预期的权限拒绝错误:

Current: =
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=1000(ywen)
gid=1000(ywen)
groups=4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),999(docker),1000(ywen)
Run Code Online (Sandbox Code Playgroud)

因为我的测试代码最终将在 Docker 容器内运行,所以我使用以下命令构建了一个映像Dockerfile

ARG UBUNTU_VERSION=18.04
FROM ubuntu:${UBUNTU_VERSION}
ARG USER_NAME=ywen
ARG USER_ID=1000
ARG GROUP_ID=1000

RUN apt-get update

# Install the needed packages.
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install …
Run Code Online (Sandbox Code Playgroud)

python sockets port docker linux-capabilities

6
推荐指数
1
解决办法
4805
查看次数