Im using BehaviourSubject from RxJS:
private rights = new BehaviorSubject<Array<string>>([]);
updateRights(rights: Array<string>) {
this.rights.next(rights);
}
getRights(): Observable<any> {
return this.rights.asObservable();
}
Run Code Online (Sandbox Code Playgroud)
I'm updating the rights in the root component and im subscribing to it in another component like:
this.configService.getRights().subscribe(res => {
console.log(res);
})
Run Code Online (Sandbox Code Playgroud)
This subscription is firing twice. Once when the data is empty and then again when the data is received.
I want the subscription to fire only once and get only the latest data. What should be done?
我正在使用 Django Rest 框架。我想为 RetrieveUpdateDestroyAPI View 授予权限类
我的权限类别:
class AssetItemPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
user = request.user
shared_item_course = False
is_content_author = PermissionHelper().check_permission(
request.user, ['create_content'])
courses = Course.objects.filter(module=obj)
if any(obj.tenant in course.tenants.all() for course in courses):
shared_item_course = True
elif any(obj.status==TenantShareItemStatusValues.SHARED_TO_ALL.value for course in courses):
shared_item_course = True
if Enrolment.objects.filter(enrollable__in=courses, enrollee=request.user,
status=EnrolmentStatus(short_name=EnrolmentStatusValues.APPROVED.value)
).exists():
print("Is enrolled by user")
return True
elif is_content_author and obj.tenant == request.user.tenant:
print("is content author and it is in tenant")
return True
elif is_content_author and shared_item_course: …Run Code Online (Sandbox Code Playgroud) 我正在使用基于 Django 类的视图和表单。我希望视图在提交新消息后保持在同一页面上。网址就像
localhost:8000/chat/messages/username/
Run Code Online (Sandbox Code Playgroud)
其中 'username' 是接收消息的用户的用户名
class ThreadView(LoginRequiredMixin, FormMixin, DetailView):
template_name = 'thread.html'
form_class = ComposeForm
def get_queryset(self):
return Thread.objects.by_user(self.request.user)
def get_object(self):
other_username = self.kwargs.get("username")
obj, created = Thread.objects.get_or_new(self.request.user, other_username)
if obj == None:
raise Http404
return obj
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['form'] = self.get_form()
return context
def post(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return HttpResponseForbidden()
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
thread = self.get_object()
user …Run Code Online (Sandbox Code Playgroud) 我正在尝试在用户在 django 应用程序中注册后创建用户配置文件。
用户创建工作正常,但它不是管理页面中的配置文件模型。
它没有显示任何错误。
到目前为止,我已经这样做了。
用户/信号.py
from django.db.models.signals import post_save
from django.contrib.auth.models import User
#reciever
from django.dispatch import receiver
from .models import Profile
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
Run Code Online (Sandbox Code Playgroud)
用户/应用程序.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
def ready(self):
import users.signals
Run Code Online (Sandbox Code Playgroud)
用户/模型.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pic')
def …Run Code Online (Sandbox Code Playgroud)