极墨笔记

 找回密码
 立即注册
搜索
热搜: UG 建模 discuz
查看: 695|回复: 0

[分享] 账号注册登入功能实现

[复制链接]

565

主题

731

帖子

7473

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7473

活跃会员推广达人突出贡献优秀版主荣誉管理论坛元老

发表于 2018-11-28 22:26:53 | 显示全部楼层 |阅读模式
账号的注册、登入和用户的评论都是客户端向服务器发起的请求和数据写人。
1.首先要新建一个表单处理模块,改模块的代码如下,并保存为“forms.py”于“zero”文件夹下。
  1. from django import forms
  2. from django.conf import settings
  3. from django.db.models import Q
  4. from zero.models import User
  5. import re

  6. class LoginForm(forms.Form):
  7.     '''
  8.     登录Form
  9.     '''
  10.     username = forms.CharField(widget=forms.TextInput(attrs={"placeholder": "Username", "required": "required",}),
  11.                               max_length=50,error_messages={"required": "username不能为空",})
  12.     password = forms.CharField(widget=forms.PasswordInput(attrs={"placeholder": "Password", "required": "required",}),
  13.                               max_length=20,error_messages={"required": "password不能为空",})

  14. class RegForm(forms.Form):
  15.     '''
  16.     注册表单
  17.     '''
  18.     username = forms.CharField(widget=forms.TextInput(attrs={"placeholder": "Username", "required": "required",}),
  19.                               max_length=50,error_messages={"required": "username不能为空",})
  20.     email = forms.EmailField(widget=forms.TextInput(attrs={"placeholder": "Email", "required": "required",}),
  21.                               max_length=50,error_messages={"required": "email不能为空",})
  22.     password = forms.CharField(widget=forms.PasswordInput(attrs={"placeholder": "Password", "required": "required",}),
  23.                               max_length=20,error_messages={"required": "password不能为空",})

  24. class CommentForm(forms.Form):
  25.     '''
  26.     评论表单
  27.     '''
  28.     author = forms.CharField(widget=forms.TextInput(attrs={"id": "author", "class": "comment_input",
  29.                                                            "required": "required","size": "25", "tabindex": "1"}),
  30.                               max_length=50,error_messages={"required":"username不能为空",})
  31.     email = forms.EmailField(widget=forms.TextInput(attrs={"id":"email","type":"email","class": "comment_input",
  32.                                                            "required":"required","size":"25", "tabindex":"2"}),
  33.                                  max_length=50, error_messages={"required":"email不能为空",})
  34.     comment = forms.CharField(widget=forms.Textarea(attrs={"id":"comment","class": "message_input",
  35.                                                            "required": "required", "cols": "25",
  36.                                                            "rows": "5", "tabindex": "4"}),
  37.                                                     error_messages={"required":"评论不能为空",})
  38.     article = forms.CharField(widget=forms.HiddenInput())
复制代码
2.在views.py的注册和登入方法中加入下面这些代码用于处理用户提交来的信息。
加载登入注册和登入所需要的模块:
  1. from django.shortcuts import render, redirect
  2. from django.contrib.auth import logout, login, authenticate
  3. from django.contrib.auth.hashers import make_password
  4. from zero.forms import *
复制代码
添加登入和注册的方法:为了避免和加载的login冲突,这里改成do_login和do_register,urls.py中同样要修改。
  1. def do_login(request):
  2.     if request.method == 'POST':
  3.         login_form = LoginForm(request.POST)
  4.         if login_form.is_valid():
  5.             # 登录
  6.             username = login_form.cleaned_data["username"]
  7.             password = login_form.cleaned_data["password"]
  8.             user = authenticate(username=username, password=password)
  9.             if user is not None:
  10.                 user.backend = 'django.contrib.auth.backends.ModelBackend' # 指定默认的登录验证方式
  11.                 login(request, user)
  12.             return redirect(request.POST.get('source_url'))
  13.         else:
  14.             pass
  15.     else:
  16.         login_form = LoginForm()
  17.     return render(request, 'login.html', locals())
  18.         
  19. def do_register(request):
  20.     if request.method == 'POST':
  21.         reg_form = RegForm(request.POST)
  22.         if reg_form.is_valid():
  23.             # 注册
  24.             user = User.objects.create(username=reg_form.cleaned_data["username"],
  25.                         email=reg_form.cleaned_data["email"],
  26.                         password=make_password(reg_form.cleaned_data["password"]),)
  27.             user.save()

  28.         # 登录
  29.             user.backend = 'django.contrib.auth.backends.ModelBackend' # 指定默认的登录验证方式
  30.             login(request, user)
  31.             return redirect(request.POST.get('source_url'))
  32.         else:
  33.             pass
  34.     else:
  35.         reg_form = RegForm()
  36.     return render(request, 'register.html', locals())
复制代码
3.在前端页面中修改表单填写部分代码:
  1. <form class="form" action="{% url 'register' %}" method="post">
  2. {% csrf_token %}
  3. {{ reg_form.username }}
  4. {{ reg_form.email }}
  5. {{ reg_form.password }}
  6. <input type="hidden" name="source_url" value="{{ request.META.HTTP_REFERER }}">
  7. <input type="submit" value="注册">
  8. </form>
复制代码
完成注册登入功能
4.将首页信息栏使用下面这种方式区分登入与非登入状态
  1. {% if not request.user.is_authenticated %}
  2. 登入状态代码
  3. {% else %}
  4. 非登入状态代码
  5. {% endif %}
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|论坛版权|极墨笔记 ( 浙ICP备17036881号-1 )

GMT+8, 2019-12-8 21:00 , Processed in 0.053498 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表