标签: django-authentication

在Django中创建用户通知系统

我正在添加一个系统,为下次登录时可以显示的用户留下"通知".我在models.py文件中创建了一个简单的Notification类.我有这个UserInfo类(在相同的models.py中)作为socialauth的一部分将一些属性添加到Django的现有用户系统:

class UserInfo(models.Model):
    user = models.OneToOneField(User, unique=True)
    ...
    reputation = models.IntegerField(null=True, blank=True)

    def add_notification(message):
        notification = Notification(user=self.user, message=message)
        notification.save
Run Code Online (Sandbox Code Playgroud)

当我在控制台中尝试时,我最终得到了这个:

>>> user = User.objects.get(id=14)
>>> user.userinfo.add_notification('you are an awesome intern!')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: add_notification() takes exactly 1 argument (2 given)
>>> 
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?我是一个Django noob,所以也许这很简单.谢谢!

django-models django-authentication django-socialauth

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

使用现有的django.contrib.auth.forms实现Django Simple Captcha

我想使用Django Simple Captcha在我的django注册表单上添加验证码 :http://code.google.com/p/django-simple-captcha/

如果您创建一个新表单但是我正在使用django附带的django.contrib.auth.forms,那么这很有用.知道如何使用现有的django auth视图实现验证码吗?谢谢!

django django-forms django-views django-authentication

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

Django:有什么方法可以避免在每次请求时查询request.user吗?

对于我的网站,几乎每个页面都有一个标题栏显示"欢迎,ABC",其中"ABC"是用户名.这意味着request.user将为每一个请求调用,导致数据库一次又一次地命中.

但是一旦用户登录,我应该能够将他的user实例存储在他的cookie中并加密它.这样我可以避免重复访问数据库,而只是request.user从cookie中检索.

你会如何修改Django来做到这一点?是否有任何Django插件可以满足我的需求?

谢谢

django django-authentication django-sessions

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

如何在Django-auth生成的页面中启用https?

使用Django-auth应用程序(Django版本1.3),我想让我的登录页面转到https://mysite.com/login/.目前,我正在使用:

# urls.py
from django.contrib.auth.views import login
urlpatterns = patterns('', url(r'^login/$', login, name='login-view'),)

# navbar.html
<li id="nav-login"><a href="{% url login-view %}" ><b>Login</b></a></li>
Run Code Online (Sandbox Code Playgroud)

这很好用,但去了http://mysite.com/login/.

有什么方法可以告诉Django-auth在反转视图名称时使用什么前缀(https)?我已经阅读了整个手册页,但没有找到任何涵盖它的内容.或者也许某种方式告诉url标签转到https?

或者是手动指定整个URL的唯一选项?我希望不是:)鉴于Django到目前为止有多强大,我无法相信它不具备这种能力 - 我必须忽视它.:)

django https django-authentication

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

Django密码重置.不发送邮件

我正在尝试让django密码重置工作,但重置电子邮件不会被发送.

我知道我的电子邮件配置正确,因为以下内容适用于shell和我的一个视图(我用它来获取支持电子邮件给自己).

from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.',
          'admin@mydomain.com',['me@gmail.com'], fail_silently=False)
Run Code Online (Sandbox Code Playgroud)

我可以进入我的重置密码视图(密码/重置/),在我给它我的电子邮件后,它正确地重定向到密码/重置/完成/但它不发送电子邮件.

这是我的urls.py:

(r'^password/reset/$','django.contrib.auth.views.password_reset'),
(r'^password/reset/done/$','django.contrib.auth.views.password_reset_done'),
(r'^password/reset/confirm/$','django.contrib.auth.views.password_reset_confirm'),
(r'^password/reset/complete/$','django.contrib.auth.views.password_reset_confirm'),
(r'^password/change/$','django.contrib.auth.views.password_change'),
(r'^password/change/done/$','django.contrib.auth.views.password_change_done'),
Run Code Online (Sandbox Code Playgroud)

这是我的password_reset_form.html:

<html>
<head>
    <link rel="stylesheet" type="text/css" href="/media/css/style_login.css" />
    <title>Información de acceso requerida</title>
</head>
<body>
    <div id="wrapper">
        <h1>Recuperar password</h1>
        <p>Utilice este formulario cuando desee recuperar el password para su usuario.</p>
        {% if form.errors %}
        <p>No hay un usuario registrado con ese correo electronico.</p>
        {% endif %}
        <form method="post" action="{% url django.contrib.auth.views.password_reset_done …
Run Code Online (Sandbox Code Playgroud)

email django django-forms django-authentication

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

从Django Auth中的UserChangeForm中排除用户名或密码

我正在试图找出如何从中排除用户名和/或密码的方法UserChangeForm.我试过了两个exclude,fields但我不适用于这两个领域.

这是一些代码:

class ArtistForm(ModelForm):
    class Meta:
        model = Artist
        exclude = ('user',)

class UserForm(UserChangeForm):
    class Meta:
        model = User
        fields = (
            'first_name',
            'last_name',
            'email',
            )
        exclude = ('username','password',)

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper
        self.helper.form_tag = False
        super(UserForm, self).__init__(*args, **kwargs)
        artist_kwargs = kwargs.copy()
        if kwargs.has_key('instance'):
            self.artist = kwargs['instance'].artist
            artist_kwargs['instance'] = self.artist
        self.artist_form = ArtistForm(*args, **artist_kwargs)
        self.fields.update(self.artist_form.fields)
        self.initial.update(self.artist_form.initial)

    def clean(self):
        cleaned_data = super(UserForm, self).clean()
        self.errors.update(self.artist_form.errors)
        return cleaned_data

    def save(self, commit=True):
        self.artist_form.save(commit)
        return super(UserForm, …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-authentication django-users

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

Django pbkdf2_sha256 JS实现

我有一个来自django的数据库,我想从Node.js使用它.我有一个任务:验证用户身份.从数据库中已知:算法pbkdf2_sha256,salt,10000次迭代和base64编码的哈希.我必须在JS中执行哪些步骤来将某些密码编码为给定的base64-hash?

UPD:在这里找到解决方案:python(django)hashlib vs Nodejs crypto 但是Django生成的hash和JS生成的hash不匹配...
Django生成下一个:

pbkdf2_sha256$10000$NmzpPCQiTe2R$U8ipSsOy3Xz7FwWDHdH/dTei8Xh4Q7NGtdzrCacSfvo=
Run Code Online (Sandbox Code Playgroud)

JS:

pbkdf2_sha256$10000$NmzpPCQiTe2R$w4jCgWjDilrDmcOBd8K+I8OdwpkKwoVQZMKWH3FvYcKoAMKcwqlewobDocOEGMKZfQ==
Run Code Online (Sandbox Code Playgroud)

密码: Simple123

javascript sha256 django-authentication pbkdf2

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

如何测试登录过程?

我正在使用Django 1.6开发一个Web应用程序,我要求用户使用我的登录表单登录.我想编写一个测试用例来测试登录用户的过程.

我确实成功获得了一个工作登录页面,这意味着我能够登录.以下步骤解释了我的设置.但是,为此过程编写测试用例确实失败了.在这一点上,我既不能在测试中发现错误,也不确定这种方法是否有意义.有人能帮我吗?

更新:在此期间我注意到,我的表单错误消息太不明确了.该问题似乎是由表单字段验证步骤失败的空表单字段引起的.当我将错误添加{{ form.errors }}到模板时,响应包含以下内容(格式不太好):

<ul class="errorlist">
  <li>username
    <ul class="errorlist">
      <li>This field is required.</li>
    </ul>
  </li>
  <li>password
    <ul class="errorlist">
      <li>This field is required.</li>
    </ul>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我仍然不确定如何最合理地测试这个程序.我是Django的新手,也是它测试框架的哲学.可能是,这个问题不直接落入Django测试框架的范围,在这个框架中,模型,视图和表单(看似)是相互分离的(看似)?这个测试是否属于独立测试套件进行黑盒/功能测试的领域,例如,使用Selenium?


我开始是这样的:

  1. 开始了一个新项目,如下所示:

    django-admin.py startproject login_test
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加了一个条目login_test/urls.py,像这样:

    urlpatterns = patterns('',
        url(r'^login/$', 'django.contrib.auth.views.login'),
        url(r'^admin/', include(admin.site.urls)),
    )
    
    Run Code Online (Sandbox Code Playgroud)
  3. 制作模板/home/moooeeeep/login_test/templates/registration/login.html,如下:

    {% if form.errors %}
    <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    {% if not user.is_active %}
    <form method="post" action="{% url 'django.contrib.auth.views.login' %}">
      {% csrf_token %} …
    Run Code Online (Sandbox Code Playgroud)

django validation django-forms django-authentication django-testing

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

Django:如何使用通用CreateView在注册后直接登录用户

使用django generic CreateView我可以创建一个新的用户帐户,但是如何在注册后使用这种技术自动登录该用户?

urls.py

...    
url( r'^signup/$', SignUpView.as_view(), name = 'user_signup' ),
...
Run Code Online (Sandbox Code Playgroud)

views.py

class SignUpView ( CreateView ) :    
    form_class = AccountCreationForm
    template_name = 'accounts/signup.html'
    success_url = reverse_lazy( 'home' )
Run Code Online (Sandbox Code Playgroud)

forms.py

class AccountCreationForm ( forms.ModelForm ) :        
    def __init__( self, *args, **kwargs ) :
        super( AccountCreationForm, self ).__init__( *args, **kwargs )
        for field in self.fields :
           self.fields[field].widget.attrs['class'] = 'form-control'

    password1 = forms.CharField( label = 'Password', widget = forms.PasswordInput )
    password2 = forms.CharField( label = 'Password confirmation', widget = forms.PasswordInput …
Run Code Online (Sandbox Code Playgroud)

python django-authentication django-generic-views

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

'AnonymousUser'对象不可迭代

if not request.user.is_authenticated:
    return None

try:
    return ClientProfile.objects.get(user=request.user)
except ClientProfile.DoesNotExist:
    return None
Run Code Online (Sandbox Code Playgroud)

如果我没有登录并尝试调用它,则此代码应返回None.但正如我从stacktrace中看到的那样,崩溃时出现错误"'AnonymousUser'对象不可迭代"在这一行:

return ClientProfile.objects.get(user=request.user)
Run Code Online (Sandbox Code Playgroud)

我正在以私人模式浏览以下页面,因此我100%未经过身份验证.

如何解决这个问题?

django django-authentication

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