Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用django制作注册和登录系统?_Python_Django - Fatal编程技术网

Python 如何使用django制作注册和登录系统?

Python 如何使用django制作注册和登录系统?,python,django,Python,Django,我想创建一个注册和登录系统。我已经制作了注册表,但我无法执行其中的身份验证部分 型号.py from __future__ import unicode_literals from django.db import models class profile(models.Model): WORK = ( ('School', 'School'), ('Collage', 'Collage'), ('Job', '

我想创建一个注册和登录系统。我已经制作了注册表,但我无法执行其中的身份验证部分

型号.py

from __future__ import unicode_literals
from django.db import models


class profile(models.Model):
    WORK = (
            ('School', 'School'),
            ('Collage', 'Collage'),
            ('Job', 'Job')
        )
    name = models.CharField(max_length=150)
    email = models.EmailField(max_length=254)
    username = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=80)
    age = models.IntegerField() 
    work = models.CharField(max_length=10, choices=WORK)


    def __unicode__(self):
        return self.username 
from django.db import models
from django.contrib.auth.models import AbstractUser

class Profile(AbstractUser):
    WORK = (
        ('School', 'School'),
        ('Collage', 'Collage'),
        ('Job', 'Job')
    )
                                                        )
    age = models.IntegerField() 
    work = models.CharField(max_length=10, choices=WORK)
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.views import login as django_login_view
from django.views.generic import FormView


class LoginView(FormView):
    form_class = AuthenticationForm
    template_name = 'my_users_app/login.html'

    def form_valid(self, form):
        usuario = form.get_user()

        django_login_view(self.request, usuario)
        return super(LoginView, self).form_valid(form)
from my_users_app.views import LoginView
urlpatterns = [
    url(r'^login/$', LoginView.as_view(), name='login'),
]
用于用户注册的Forms.py


我想使用上面的数据库对用户进行身份验证我该如何做?(我也不想使用任何第三方库,如django registration)

@Alasdair是对的,您不需要django.contrib.admin来使用django.contrib.auth

接下来是一个利用django泛型类视图的解决方案

型号.py

from __future__ import unicode_literals
from django.db import models


class profile(models.Model):
    WORK = (
            ('School', 'School'),
            ('Collage', 'Collage'),
            ('Job', 'Job')
        )
    name = models.CharField(max_length=150)
    email = models.EmailField(max_length=254)
    username = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=80)
    age = models.IntegerField() 
    work = models.CharField(max_length=10, choices=WORK)


    def __unicode__(self):
        return self.username 
from django.db import models
from django.contrib.auth.models import AbstractUser

class Profile(AbstractUser):
    WORK = (
        ('School', 'School'),
        ('Collage', 'Collage'),
        ('Job', 'Job')
    )
                                                        )
    age = models.IntegerField() 
    work = models.CharField(max_length=10, choices=WORK)
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.views import login as django_login_view
from django.views.generic import FormView


class LoginView(FormView):
    form_class = AuthenticationForm
    template_name = 'my_users_app/login.html'

    def form_valid(self, form):
        usuario = form.get_user()

        django_login_view(self.request, usuario)
        return super(LoginView, self).form_valid(form)
from my_users_app.views import LoginView
urlpatterns = [
    url(r'^login/$', LoginView.as_view(), name='login'),
]
设置.py

AUTH_USER_MODEL = 'my_users_app.Profile'
LOGIN_URL = '/login/'  # Where our login page is
视图.py

from __future__ import unicode_literals
from django.db import models


class profile(models.Model):
    WORK = (
            ('School', 'School'),
            ('Collage', 'Collage'),
            ('Job', 'Job')
        )
    name = models.CharField(max_length=150)
    email = models.EmailField(max_length=254)
    username = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=80)
    age = models.IntegerField() 
    work = models.CharField(max_length=10, choices=WORK)


    def __unicode__(self):
        return self.username 
from django.db import models
from django.contrib.auth.models import AbstractUser

class Profile(AbstractUser):
    WORK = (
        ('School', 'School'),
        ('Collage', 'Collage'),
        ('Job', 'Job')
    )
                                                        )
    age = models.IntegerField() 
    work = models.CharField(max_length=10, choices=WORK)
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.views import login as django_login_view
from django.views.generic import FormView


class LoginView(FormView):
    form_class = AuthenticationForm
    template_name = 'my_users_app/login.html'

    def form_valid(self, form):
        usuario = form.get_user()

        django_login_view(self.request, usuario)
        return super(LoginView, self).form_valid(form)
from my_users_app.views import LoginView
urlpatterns = [
    url(r'^login/$', LoginView.as_view(), name='login'),
]
url.py

from __future__ import unicode_literals
from django.db import models


class profile(models.Model):
    WORK = (
            ('School', 'School'),
            ('Collage', 'Collage'),
            ('Job', 'Job')
        )
    name = models.CharField(max_length=150)
    email = models.EmailField(max_length=254)
    username = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=80)
    age = models.IntegerField() 
    work = models.CharField(max_length=10, choices=WORK)


    def __unicode__(self):
        return self.username 
from django.db import models
from django.contrib.auth.models import AbstractUser

class Profile(AbstractUser):
    WORK = (
        ('School', 'School'),
        ('Collage', 'Collage'),
        ('Job', 'Job')
    )
                                                        )
    age = models.IntegerField() 
    work = models.CharField(max_length=10, choices=WORK)
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.views import login as django_login_view
from django.views.generic import FormView


class LoginView(FormView):
    form_class = AuthenticationForm
    template_name = 'my_users_app/login.html'

    def form_valid(self, form):
        usuario = form.get_user()

        django_login_view(self.request, usuario)
        return super(LoginView, self).form_valid(form)
from my_users_app.views import LoginView
urlpatterns = [
    url(r'^login/$', LoginView.as_view(), name='login'),
]
login.html

<form method="post" autocomplete="off">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Login</button>
</form>

{%csrf_令牌%}
{{form.as_p}}
登录
注:

  • 为了创建自己的用户模型,您需要配置
    AUTH\u User\u模型
    ,并从
    AbstractUser
    继承
  • AuthenticationForm
    将验证用户名/密码,并触发form\u valid
  • 我正在使用django.contrib.auth.views import login中的
    导入django login视图,该视图负责在表单验证后执行登录操作

    • @Alasdair是对的,使用django.contrib.auth不需要django.contrib.admin

      接下来是一个利用django泛型类视图的解决方案

      型号.py

      from __future__ import unicode_literals
      from django.db import models
      
      
      class profile(models.Model):
          WORK = (
                  ('School', 'School'),
                  ('Collage', 'Collage'),
                  ('Job', 'Job')
              )
          name = models.CharField(max_length=150)
          email = models.EmailField(max_length=254)
          username = models.CharField(max_length=100, unique=True)
          password = models.CharField(max_length=80)
          age = models.IntegerField() 
          work = models.CharField(max_length=10, choices=WORK)
      
      
          def __unicode__(self):
              return self.username 
      
      from django.db import models
      from django.contrib.auth.models import AbstractUser
      
      class Profile(AbstractUser):
          WORK = (
              ('School', 'School'),
              ('Collage', 'Collage'),
              ('Job', 'Job')
          )
                                                              )
          age = models.IntegerField() 
          work = models.CharField(max_length=10, choices=WORK)
      
      from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
      from django.contrib.auth.views import login as django_login_view
      from django.views.generic import FormView
      
      
      class LoginView(FormView):
          form_class = AuthenticationForm
          template_name = 'my_users_app/login.html'
      
          def form_valid(self, form):
              usuario = form.get_user()
      
              django_login_view(self.request, usuario)
              return super(LoginView, self).form_valid(form)
      
      from my_users_app.views import LoginView
      urlpatterns = [
          url(r'^login/$', LoginView.as_view(), name='login'),
      ]
      
      设置.py

      AUTH_USER_MODEL = 'my_users_app.Profile'
      LOGIN_URL = '/login/'  # Where our login page is
      
      视图.py

      from __future__ import unicode_literals
      from django.db import models
      
      
      class profile(models.Model):
          WORK = (
                  ('School', 'School'),
                  ('Collage', 'Collage'),
                  ('Job', 'Job')
              )
          name = models.CharField(max_length=150)
          email = models.EmailField(max_length=254)
          username = models.CharField(max_length=100, unique=True)
          password = models.CharField(max_length=80)
          age = models.IntegerField() 
          work = models.CharField(max_length=10, choices=WORK)
      
      
          def __unicode__(self):
              return self.username 
      
      from django.db import models
      from django.contrib.auth.models import AbstractUser
      
      class Profile(AbstractUser):
          WORK = (
              ('School', 'School'),
              ('Collage', 'Collage'),
              ('Job', 'Job')
          )
                                                              )
          age = models.IntegerField() 
          work = models.CharField(max_length=10, choices=WORK)
      
      from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
      from django.contrib.auth.views import login as django_login_view
      from django.views.generic import FormView
      
      
      class LoginView(FormView):
          form_class = AuthenticationForm
          template_name = 'my_users_app/login.html'
      
          def form_valid(self, form):
              usuario = form.get_user()
      
              django_login_view(self.request, usuario)
              return super(LoginView, self).form_valid(form)
      
      from my_users_app.views import LoginView
      urlpatterns = [
          url(r'^login/$', LoginView.as_view(), name='login'),
      ]
      
      url.py

      from __future__ import unicode_literals
      from django.db import models
      
      
      class profile(models.Model):
          WORK = (
                  ('School', 'School'),
                  ('Collage', 'Collage'),
                  ('Job', 'Job')
              )
          name = models.CharField(max_length=150)
          email = models.EmailField(max_length=254)
          username = models.CharField(max_length=100, unique=True)
          password = models.CharField(max_length=80)
          age = models.IntegerField() 
          work = models.CharField(max_length=10, choices=WORK)
      
      
          def __unicode__(self):
              return self.username 
      
      from django.db import models
      from django.contrib.auth.models import AbstractUser
      
      class Profile(AbstractUser):
          WORK = (
              ('School', 'School'),
              ('Collage', 'Collage'),
              ('Job', 'Job')
          )
                                                              )
          age = models.IntegerField() 
          work = models.CharField(max_length=10, choices=WORK)
      
      from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
      from django.contrib.auth.views import login as django_login_view
      from django.views.generic import FormView
      
      
      class LoginView(FormView):
          form_class = AuthenticationForm
          template_name = 'my_users_app/login.html'
      
          def form_valid(self, form):
              usuario = form.get_user()
      
              django_login_view(self.request, usuario)
              return super(LoginView, self).form_valid(form)
      
      from my_users_app.views import LoginView
      urlpatterns = [
          url(r'^login/$', LoginView.as_view(), name='login'),
      ]
      
      login.html

      <form method="post" autocomplete="off">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Login</button>
      </form>
      
      
      {%csrf_令牌%}
      {{form.as_p}}
      登录
      
      注:

      • 为了创建自己的用户模型,您需要配置
        AUTH\u User\u模型
        ,并从
        AbstractUser
        继承
      • AuthenticationForm
        将验证用户名/密码,并触发form\u valid
      • 我正在使用django.contrib.auth.views import login中的
        导入django login视图,该视图负责在表单验证后执行登录操作

      你看过django.contrib.auth吗?提供通用的构建块来做你想做的事情,并阻止你做像在数据库中以明文形式存储密码之类的事情…是啊,但它让django管理员发挥作用,并且有比我想要的少得多的字段不要像这样使用你自己的身份验证系统,它是不安全的。您不应该像现在这样将密码存储为纯文本。Django auth应用程序允许您创建一个包含额外字段的应用程序。您可以在不启用管理员的情况下使用auth应用程序-它们是独立的应用程序。@Alasdair那么请告诉我如何在不启用管理员的情况下使用django auth应用程序,对于密码,我肯定会创建一个额外的字段开始,如果您遇到问题,请询问更具体的问题。您是否查看了django.contrib.auth?提供通用的构建块来做你想做的事情,并阻止你做像在数据库中以明文形式存储密码之类的事情…是啊,但它让django管理员发挥作用,并且有比我想要的少得多的字段不要像这样使用你自己的身份验证系统,它是不安全的。您不应该像现在这样将密码存储为纯文本。Django auth应用程序允许您创建一个包含额外字段的应用程序。您可以在不启用管理员的情况下使用auth应用程序-它们是独立的应用程序。@Alasdair那么请告诉我如何在不启用管理员的情况下使用django auth应用程序,对于密码,我肯定会创建一个额外的字段开始,如果您遇到问题,请询问更具体的问题。