关于注册和登录的功能,这几天弄得我有点头大,看了无数的教程,越看越糊涂,还是认真去看最原始的官方教程,终于有所了解。
现在已经是凌晨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函数和模板即可。