小编IAm*_*ale的帖子

如何从BasePermission中访问URL参数?

我正在尝试编写自定义的rest_framework权限,以防止用户查询与他们不属于同一公司的信息.不幸的是,我似乎无法访问任何URL的参数从内部has_permission()has_object_permissions().

这是我的路由器的开头:

# Create a basic router
router = routers.SimpleRouter()
# Establish some variables to assist with nested routes
root_elem = 'companies'
root_elem_id = '/(?P<company_id>[0-9]+)'
loca_elem = '/locations'
loca_elem_id = '/(?P<location_id>[0-9]+)'
# Companies will be the root from which all other relations branch
router.register(r'' + root_elem, views.CompanyViewSet)
router.register(r'' + root_elem + root_elem_id + loca_elem,
                views.LocationViewSet)
Run Code Online (Sandbox Code Playgroud)

这是我的自定义权限:

# Only permit actions originating from location managers or company admins
class IsLocationManagerOrHigher(BasePermission):
    # Checked when displaying lists of records …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

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

我应该如何通知用户SQLite Asset Helper第一次加载数据库?

我正在使用SQLite资产助手库来处理设置和升级我的应用程序数据库的肮脏工作.它工作得很好但不幸的是我还没有找到一种方法来通知用户何时库:

A)首次加载数据库(通过从\ assets\databases \文件夹中解压缩)

要么

B)升级数据库(使用\ assets\datates中升级的数据库文件中的信息)

我尝试将此代码放在我的应用程序的主Activity.onCreate()中,以为我可以在主线程上加载数据库(如果它不存在),同时用不可解雇的AlertDialog分散用户的注意力:

    File dbFile=this.getDatabasePath("gShoJMDict");
    Boolean dbExists = dbFile.exists();
    Log.i("ActivityStartScreen", String.valueOf(dbExists));

    if(!dbExists)
    {
        DialogFirstRun dialogFirstRun = new DialogFirstRun();
        dialogFirstRun.show(getSupportFragmentManager(), "dialogFirstRun");
        dialogFirstRun.setCancelable(false);
        DictHelper helper = new DictHelper(this);
        helper.getReadableDatabase();
        helper.close();
        dialogFirstRun.dismiss();
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,基于LogCat条目,SQLite资产助手会在onCreate()之前检查数据库是否存在,所以当上面的代码块运行时,数据库已经存在,因此对话框永远不会出现.

我正在使用ContentProvider,并且我已经验证我只是在query()或update()中调用getReadableDatabase().我的ContentProvider的onCreate()看起来像这样......

@Override
public boolean onCreate()
{
    // Load our database
    gdb = new JMDictHelper(getContext());
    return true;
}
Run Code Online (Sandbox Code Playgroud)

...但是尽管移动了gdb = new JMDictHelper(getContext()); 在查询()或更新()之前,SQLite资产助手库仍然可以在我通知用户之前很好地加载数据库.

在这种情况下,我可以做什么来拦截数据库的初始设置或升级,并通知用户应用程序正在忙于执行这些任务?现在,应用程序只是在那里做任何事情,直到库完成 - 这对于测试很好,因为我知道期待它,但是当我准备让应用程序上线时,我不能这样做.

android android-sqlite

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

如何从PreferenceFragment显示对话框?

当我在PreferenceFragment中点击一个Preference时,我正试图调出一个DialogFragment.不幸的是,当我在DialogFragment.show()中调用getFragmentManager()时,我收到以下错误:

无法解析方法'show(android.app.FragmentManager,java.lang.String)'

问题是我似乎无法从这个片段中引用android.support.v4.app.FragmentManager.负责这个片段的活动从FragmentActivity延伸,但显然这还不够.我也试过调用getSupportFragmentManager(),但这给了我这个错误:

无法解析方法'getSupportFragmentManager()'

我怎样才能做到这一点?

这是一些代码:

gPrefAcknowledgements.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener()
{
    @Override
    public boolean onPreferenceClick(Preference preference)
    {
        DialogAcknowledgements dialogAck = new DialogAcknowledgements();
        dialogAck.show(getFragmentManager(), "acknowledgements");
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)

android preferences android-support-library

6
推荐指数
2
解决办法
6082
查看次数

Python在fetchone上运行缓慢,挂起在fetchall上

我正在编写一个脚本来SELECT查询数据库并解析~33,000条记录.不幸的是,我在cursor.fetchone()/ cursor.fetchall()阶段遇到了问题.

我首先尝试一次迭代光标一条记录,如下所示:

# Run through every record, extract the kanji, then query for FK and weight
printStatus("Starting weight calculations")
while True:
    # Get the next row in the cursor
    row = cursor.fetchone()
    if row == None:
        break

    # TODO: Determine if there's any kanji in row[2]

    weight = float((row[3] + row[4]))/2
    printStatus("Weight: " + str(weight))
Run Code Online (Sandbox Code Playgroud)

根据输出printStatus(打印出时间戳加上传递给它的任何字符串),脚本花了大约1秒来处理每一行.这让我相信每次循环迭代时都会重新运行查询(使用LIMIT 1或其他东西),因为在SQLiteStudio [i]和[/]中运行一次相同的查询需要大约1秒钟我]返回所有33,000行.我计算出,按照这个速度,通过所有33,000条记录大约需要7个小时.

我尝试使用cursor.fetchall()代替而不是坐在那里:

results = cursor.fetchall()

# Run through every record, extract the kanji, then query for FK …
Run Code Online (Sandbox Code Playgroud)

python sqlite

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

Rest_Framework APIClient 测试返回 401 Unauthorized with Token Authentication

我正在为我的rest_framework API 编写一些测试,并使用令牌身份验证来保护它。我决定使用 DRF 的APIClient类来模拟来自用户浏览器的调用。

我可以通过点击身份验证端点从 API 中获取令牌,但是当我尝试使用这些令牌来验证对其他端点的任何进一步请求时,我收到一条401 Unauthorized错误消息“无效令牌”。

奇怪的是,我可以复制粘贴完全相同的令牌,并通过 HTTPIE 等方式向完全相同的端点发出成功的手动 GET 请求...

这是我的tests.py

import json

from rest_framework import status
from rest_framework.test import APIClient
from rest_framework.test import APITestCase


class TestUser(object):
    """
    A basic user class to simplify requests to the API
    Tokens can be generated by authing as a user to /v1/auth/
    """
    def __init__(self, token):
        self.client = APIClient()
        self.token = token
        self.client.credentials(HTTP_AUTHORIZATION='Token ' + token)

    def get(self, url):
        print("Token: …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

5
推荐指数
1
解决办法
4473
查看次数

在沉浸式粘滞模式下,如何拉伸片段的布局以填充屏幕?

我在Immersive Sticky Mode中的片段布局有问题.系统栏和导航栏正确消失,但片段布局不会拉伸以填充之前占据的那些栏.

这是一个屏幕截图,展示了我在说什么:

在此输入图像描述

红色是活动的背景,蓝色是片段的背景.

这就是我如何启动沉浸式粘滞模式(来自Activity,就在它加载片段之前):

public void startImmersiveMode()
{
    getWindow().getDecorView().setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
        View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
        View.SYSTEM_UI_FLAG_FULLSCREEN |
        View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
Run Code Online (Sandbox Code Playgroud)

如何让Fragment扩展以涵盖活动?

编辑 - 这是一些XML:

活动:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:background="@color/red"/>
Run Code Online (Sandbox Code Playgroud)

分段:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_view"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_blue_bright"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

android android-fragments

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