在URL获取用户名[Django的] [mongoengine]

编程入门 行业动态 更新时间:2024-10-11 11:15:14
本文介绍了在URL获取用户名[Django的] [mongoengine]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我使用的Django 1.7与mongoengine。我创建了一个类项目

I am using django 1.7 with mongoengine. I have created a class Projects :

class Projects(Document): user = ReferenceField(User, reverse_delete_rule=CASCADE) p_name = StringField(max_length=70, required=True) author = StringField(max_length=70, required=True) url = StringField(max_length=200, required=True) short_discription = StringField(max_length=100, required=True) long_discription = StringField() logo_url = StringField(max_length=200, required=False) logo = ImageField(size=(250, 250, True)) tags = TaggableManager() def __unicode__(self): return self.p_name def save(self, *args, **kwargs): self.p_name = self.p_name return super(Projects, self).save(*args, **kwargs) def get_absolute_url(self): return reverse('view_project', args=[self.p_name]) def get_edit_url(self): return reverse('update', args=[self.id]) def get_delete_url(self): return reverse('delete', args=[self.id])

,我引用,并通过我的MongoDB存储用户的我的看法

class new_project(CreateView): model = Projects form_class = NewProjectForm success_url = reverse_lazy('registered') def get_template_names(self): return["new_project.html"] def form_valid(self, form): self.object = form.save(commit=False) self.object.user = self.request.user self.object.save() return super(new_project, self).form_valid(form)

和 MongoDB的JSON 格式如下:

"user" : ObjectId("54db3e5d7818f4253e5da0db"),

我要建立用户档案,他们可以看到自己的所有项目,对于我创建了一个查看

class UserProjectsListView(ListView): model = Projects context_object_name = "project" def get_template_names(self): return ["view_user.html"] def get_queryset(self): return self.model.objects.filter(user=self.kwargs['pk'])

和我的 urls.py

url(r'^new_project/', new_project.as_view(),name='new_project'), url(r'^project/(?P<pk>[\w\d]+)', view_project.as_view(), name='view_project'), url(r'^user/(?P<pk>[\w\d]+)/$', UserProjectsListView.as_view(), name='detail'),

这里的问题是,我有使用的对象ID在我的网址,但想使用的用户名来代替。因为在模板上它呈现了用户名不是对象ID 即可。

有谁知道如何为在URL中,而不是对象ID 使用的用户名,因为模板渲染对象的ID会不利于安全的目的也。

Does anyone know how to use username in urls instead of object id, because rendering object id on template would not be good for security purpose also.

我的用户创建表单:

class UserCreationForm(forms.Form): error_messages = { 'duplicate_username': _("A user with that username already exists."), 'duplicate_email': _("A user with that email already exists."), 'password_mismatch': _("The two password fields didn't match."), } username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$', help_text=_("Required. 30 characters or fewer. Letters, digits and " "@/./+/-/_ only."), error_messages={ 'invalid': _("This value may contain only letters, numbers and " "@/./+/-/_ characters.")}) email = forms.EmailField(label=_("Email"), max_length=254, help_text=_("Required valid email. 254 characters or fewer."), error_messages={ 'invalid': _("This value may contain only valid email address.")}) password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput) password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput, help_text=_("Enter the same password as above, for verification.")) def clean_username(self): # Since User.username is unique, this check is redundant, # but it sets a nicer error message than the ORM. See #13147. username = self.cleaned_data["username"] try: User._default_manager.get(username=username) except User.DoesNotExist: return username raise forms.ValidationError( self.error_messages['duplicate_username'], code='duplicate_username', ) def clean_email(self): # Since User.username is unique, this check is redundant, # but it sets a nicer error message than the ORM. See #13147. email = self.cleaned_data["email"] try: User._default_manager.get(email=email) except User.DoesNotExist: return email raise forms.ValidationError( self.error_messages['duplicate_email'], code='duplicate_email', ) def clean_password2(self): password1 = self.cleaned_data.get("password1") password2 = self.cleaned_data.get("password2") if password1 and password2 and password1 != password2: raise forms.ValidationError( self.error_messages['password_mismatch'], code='password_mismatch', ) return password2 def save(self): user = User._default_manager.create_user( username=self.cleaned_data['username'], email=self.cleaned_data['email'], password=self.cleaned_data["password1"]) return user

我也想从三个表中获取数据,我已经开发使用的,而不是类:

I also want to get data from three tables and i have used dev instead of class:

def UserProjectsListView(request, pk): return render_to_response('view_user.html', { 'tuorial' : Tutorial.objects.filter(user=pk), 'question' : Question.objects.filter(user=pk), 'project': Project.objects.filter(user=pk), })

P.S。先谢谢了。

推荐答案

如果MongoEngine不能模拟连接,这是非常简单的事这两个单独的查询:

If MongoEngine can't simulate joins, it is very simple to do this in two separate queries:

def get_queryset(self): user = User.objects.get(username=self.kwargs['username']) return self.model.objects(user=user.id)

更多推荐

在URL获取用户名[Django的] [mongoengine]

本文发布于:2023-11-28 14:34:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1642806.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:用户名   URL   mongoengine   Django

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!