小编cod*_*der的帖子

您自己的用户模型的Django每个对象权限

我已经实现了我自己的User模型类,如下所示.请注意,它不是自定义django的auth.User模型.我是这个对象权限知识的新手,特别是在我的项目中需要的这个自定义用户模型中.

你能给出一个在这种情况下添加每个对象权限的例子吗?非常感激.

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin

class CustomUser(AbstractBaseUser, PermissionsMixin):
         email = models.EmailField(max_length=40, unique=True)
         //.... other fields are omitted

class Article(models.Model):
    title = models.CharField('title', max_length=120)
    body = models.TextField('body')
    author = models.ForeignKey(CustomUser)
Run Code Online (Sandbox Code Playgroud)

现在,对象权限发挥作用.每个用户都可以创建/更新/删除/查看他们自己的文章对象,但只能在没有更新/删除权限的情况下查看其他人的文章.

从django文档中,模型级权限不适用于此处.如果文章具有模型级别更新权限,则所有用户都可以更新其他人的文章.

所以,我发现了django-guardian.但是,这个自定义的CustomUser模型似乎没有希望,因为它很大程度上依赖于Django的auth.User模型!

https://django-guardian.readthedocs.org/en/v1.2/userguide/custom-user-model.html

更新:

  1. 我的情况是继承AbstractBaseUser而不是AbstractUser;
  2. 这不适用于管理员,而只适用于我的后端代码逻辑;
  3. 我这里没有使用Django REST API,但如果REST API合适,请举个例子.

django permissions

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

Pytorch 线性模块类定义中的常量

https://pytorch.org/docs/stable/_modules/torch/nn/modules/linear.html__constants__class Linear(Module):定义的pytorch是什么?

它的功能是什么,为什么要使用它?

我一直在四处寻找,但没有找到任何文档。请注意,这并不意味着__constants__in torch 脚本。

pytorch

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

带有更新的 slug 的 Django 通用视图 UpdateView 重定向 URL

这是我的更新视图,它由带有 slug 字段的 URL 调用,例如

/mymodel/update/<model_name_slug>/
Run Code Online (Sandbox Code Playgroud)

MyModel有两个字段,nameslug。slug 字段<model_name_slug>是从 自动生成的MyModel.name。如果用户更新它,将自动生成一个新的 slug 字段。然后,我想使用新生成的 slug 字段重定向到这个新 URL。

段塞场自动生成正在工作。它在MyModelEditForm. 但是,下面的代码不起作用。原因是:

1) 用户输入此 URL 以更新现有模型

/mymodel/update/example-model
Run Code Online (Sandbox Code Playgroud)

2) 用户将 Name 属性更改为"example model changed"。然后蛞蝓字段将作为生成"example-model-changed"MyModel

3) 但是 URL 没有重定向到"/mymodel/update/example-model-changed",因为get_object()将返回None. get()将无法将新生成的 URL"example-model-changed"与原始URL 进行比较"example-model"

我在下面的代码中缺少什么?我尝试使用 访问新的更新对象self.object,但出现以下错误:

 MyModelUpdateView object has no attribute 'object'
Run Code Online (Sandbox Code Playgroud)

这是代码片段:

class MyModelUpdateView(LoginRequiredMixin, UpdateView):
    model = MyModel
    form_class = MyModelUpdateForm …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-views django-generic-views

5
推荐指数
2
解决办法
6853
查看次数

C++ 在 priority_queue 中使用 std::greater() 并排序

为什么这两种情况的文档都说同样的事情,但它们以相反的方式声明,一个使用greater<int>而另一个使用greater<int>(). 有人可以解释一下吗?

文档priority_queue cpp 库说 comp

可以是用于对堆进行排序的比较对象。这可能是一个函数指针或函数对象

priority_queue<int, vector<int>, greater<int>> minheap;  //works
priority_queue<int, vector<int>, greater<int>() > minheap; //why fail?
Run Code Online (Sandbox Code Playgroud)

文档cpp 库 sort说了同样的事情,即 comp 可以是函数指针或函数对象。

sort (numbers.begin(), numbers.end(), std::greater<int>()); //works
sort (numbers.begin(), numbers.end(), std::greater<int>); //fail
Run Code Online (Sandbox Code Playgroud)

c++ templates types object c++11

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

删除元素的算法

我知道c ++有擦除删除习惯用法.并且该remove方法<algorithm>将目标元素移动到范围的后面.

但是,下面的输出对我来说很困惑.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<int> vec = {10, 20, 30, 20, 30, 20, 10, 10, 20};

    auto pend = remove(vec.begin(), vec.end(), 20);
    cout << "After removing 20: " << endl;
    for (const auto& x : vec) {
        cout << x << " ";
    }
    cout << endl;

    cout << "use pend: " << endl;
    for (auto p = vec.begin(); p != pend; p++) {
        cout …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

4
推荐指数
1
解决办法
284
查看次数

对于uint64_t类型,为什么-INT_MIN不是2147483648

我理解结果p.有人可以解释为什么up2 (uint64_t type) != 2147483648但是up (uint32_t type) == 2147483648

有人提到将-INT_MIN分配给无符号整数up2将导致溢出,但是

1)-INT_MIN已经是一个正数,所以可以将它分配给uint64_t up2

2)为什么分配-INT_MIN似乎没问题uint32_t up?它产生的正确结果为2147483648.

#include <iostream>
#include <climits>

using namespace std;

int main() {
    int n = INT_MIN;
    int p = -n;
    uint32_t up = -n;
    uint64_t up2 = -n;

    cout << "n: " << n << endl;
    cout << "p: " << p << " up: " << up << " up2: " << up2 << endl;
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c++

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

C ++ unordered_set的迭代器begin()是否始终指向同一元素

既然不对unordered_set<int> nums元素进行排序,*nums.begin()总是一样吗?还是当我们再次访问它时(有时很少)它会改变?

c++

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

另一个类中的类对象的 C++ 析构函数

我正在尝试实现一个SegmentTree类以在另一个类中使用Solution

在 中class SegmentTree,析构函数的实现如下:

~SegmentTree() {
    destruct(root);
};

void destruct(Node* root) {
    if (!root) return;
    
    destruct(root->left);
    destruct(root->right);
    delete root;
    root = NULL;
}
Run Code Online (Sandbox Code Playgroud)

那么,在 中class Solution,我们有

class Solution {
private:
    SegmentTree* tree;

public:
    Solution(vector<int>& nums) {
        tree = new SegmentTree(nums);
    }

    //Question: how shall ~Solution() be implemented to free memory of the pointer tree?
};
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我们是否需要实现析构函数来删除类tree中的指针Solution
  2. 如果是,该如何实施?

c++

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

C ++向左移负数

如下所示,该代码有一个错误。当输入a = -1,b = 1时,其中一行存在运行时错误。您能否帮助我了解(a和b)如何变成INT_MIN?

据我了解,-1表示为32位二进制格式0xFFFFFFFF,而1表示为32位格式0x00000001,因此(-1&1)将变为0x00000001。而且我的python命令还显示了'0b1'作为结果。为什么报告INT_MIN错误?

int getSum(int a, int b) {
    while (b != 0) {
        int carry = (a & b) << 1;//BUG! left shift of negative value -2147483648
        a = a ^ b;
        b = carry;
    }

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

更新:是否正确定义了负数的右移?只要满足以下要求,就可以右移负数。

从cppreference.com,

对于无符号a和具有非负值的带符号a,a >> b的值是a / 2b的整数部分。对于负数a,a >> b的值是实现定义的(在大多数实现中,这将执行算术右移,因此结果保持为负数)。

在任何情况下,如果右操作数的值为负或大于或等于提升后的左操作数的位数,则该行为是不确定的。

c bit-manipulation

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

带双花括号的 C++ 队列&lt;string&gt; 初始值设定项列表

从这个问题为什么我不能用大括号括起来的初始值设定项列表构造队列/堆栈?(C++11),我们知道用单花括号构造队列是行不通的。因为队列是容器适配器,它没有带有初始值设定项列表的构造函数。

但是,为什么下面的方法会起作用?双花括号是否使用容器参数调用队列的构造函数?因此内部花括号{"hello"}被视为vector<string>?

    queue<string> q{{"hello"}}; //Question: why init with double curly braces?
Run Code Online (Sandbox Code Playgroud)

c++

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

共享内存仅在堆上吗?

据我所知,堆栈内存只能由同一进程内的线程共享。

在进程间通信中,进程可以通过shmget()系统调用共享同一段内存。

这个共享内存段可以是什么?一堆还是其他什么?

更新:

在浏览有关堆栈内存和堆内存之间差异的问题后,我提出了这个问题。堆内存可以是通过的共享内存段吗shmget()?也就是说,堆内存可以在多个进程之间共享吗?

更新二:

父进程与其子进程共享同一个堆吗?我在网上找到了一些东西:“父级的堆、代码和库区域由子级共享。一个新的堆栈被分配给子级,并且父级的堆栈被复制到子级的堆栈中。”

这是否意味着不同进程之间共享相同的堆?

“还可能存在一个全局堆(例如,看看 Win32 GlobalAlloc() 系列函数),它在进程之间共享,在系统运行时持续存在,并且确实可用于进程间通信。” 参考:堆内存是每个进程的吗?(或)不同进程共享的公共内存位置?

c++ operating-system

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