如何使用django制作注册和登录系统?
问题描述:
我想创建一个注册和登录系统我已经做了注册表单,但我无法执行它的认证部分。如何使用django制作注册和登录系统?
Models.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
Forms.py对于用户的注册
from django import forms
from .models import profile
class registration_form(forms.ModelForm):
class Meta:
model = Post
fields={
"name",
"email",
"username",
"password",
"work",
"age"
}
我想用上面的数据库用户我该怎么办认证?(我也不想使用任何第三方库,如Django注册)
答
@Alasdair是对的,你不需要django.contrib.admin就可以使用django.contrib.auth。
接下来是一个解决方案,它使用基于django泛型类的视图。
models.py
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)
settings.py
AUTH_USER_MODEL = 'my_users_app.Profile'
LOGIN_URL = '/login/' # Where our login page is
views.py
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)
urls.py
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>
注:
- 为了使自己的用户模型,则需要配置
AUTH_USER_MODEL
,并继承从AbstractUser
。 -
AuthenticationForm
将验证用户名/密码并将触发form_valid。 - 我使用
from django.contrib.auth.views import login
来导入django登录视图,该视图负责在表单验证后进行登录操作。
你看过django.contrib.auth了吗?提供通用的构建模块来完成您想要的任务,并防止您将密码以纯文本形式存储在数据库中... – Jieter
Yaa但它带来了django管理员的作用,并且比我想要的字段少很多 – Rasik
**不要像这样推出自己的认证系统,这是不安全的**。您不应该将密码作为纯文本存储。 Django验证应用程序允许您使用额外的字段创建[自定义用户](https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#specifying-a-custom-user-model)。您可以在不启用管理员的情况下使用auth应用程序 - 它们是独立的应用程序。 – Alasdair