代码改变世界

127-django的注册和登录【1】:尝试使用预设的User类

2020-08-27 08:05  lzhshn  阅读(165)  评论(0)    收藏  举报

关于注册和登录的功能,这几天弄得我有点头大,看了无数的教程,越看越糊涂,还是认真去看最原始的官方教程,终于有所了解。

现在已经是凌晨0点30分了,但是小有成就,依然很兴奋,于是写下这篇日志。

 

对新人而言,还是避免重复造轮子。我们应该充分利用django已经为我们预设的各种东西,比如注册和登录这类和用户有关的。django最让人称赞的是它默认集成了一个后台,通过:python3 manage.py createsuperuser,即可创建一个后台超级管理员帐号,然后使用后台功能。

可以发现,后台里默认有2个已经存在的类:group,user,通过新建user,即可创建新的后台管理员。而之前创建的那个超级管理员,此时已经在user列表里了。并且它的is_staff=True

 

要在前端实现注册和登录,就应该多使用django已经存在的东西。下面来尝试一下:

【1】我们已经决定使用django预设的user类,因此models部分就不用写了,直接从表单入手,即:要做一个怎样的表单界面,才能满足注册和登录。

  

from django import forms
from django.contrib.auth.models import User


# 仅作测试用,非正常情况
class UserLoginForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['username', 'password', 'email']
        labels = {'username': '用户', 'password': '密码', 'email': '邮箱'}

  

这里的user不是我们自己写的类,而是直接引用系统的,然后告诉这个表单类,你要去呈现的类就是这个系统预设的user:model = User;

接着,如果使用django 2.0以上的,可以看这个地址,看一下user到底有多少字段和属性:https://docs.djangoproject.com/en/3.0/ref/contrib/auth/#django.contrib.auth.models.User

 

【2】在官方教程里,有个LoginView,可以让你连视图都不用写,直接写模板即可,这个我认为没必要!过了!

在views写一个简单的函数,先引用表单类,然后作为上下文传入:

  

from django.shortcuts import render
from .forms import UserLoginForm
# 可以发现,这里都不需要引入user类,只需要引入那个表单类即可


def login(request):
    form = UserLoginForm
    context = {'form': form}
    return render(request, 'login.html', context)

  

【3】django有后台页面,自然有对应的模板,不过django“藏起来“了,不好找!这里完全可以直接写一个,因为模板是最简单的:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
    <form>
        {% csrf_token %}
        {{form.as_p}}
        <input type="submit" value="login" />
    </form>
</body>
</html>

 

以上是借用django预设模型(或类)的基本思路,如果你打算用某个预设的模型,你只关注views函数和模板即可。