django入门(四):登陆注册
静态文件目录的配置
项目根目录创建 static 目录
settings.py 中加入
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
模板中静态文件的路径写法就变成
/static/*****
无后台逻辑时url 跳转方法
from django.views.generic import TemplateView
url('^$',TemplateView.as_view(template_name='index.html')
)
登陆
后台
基于 def
- 判断POST,GET,据此返回页面或判断用户名密码
- POST 逻辑中,取回参数,用 authenticate 函数认证,成功则返回 user 对象
- 判断 user是否为 user 对象,是则用 login函数登陆,否则返回 login 页面并配合错误提示
基于类
# view
from django.views.generic.base import View
class LoginView(View): #get post不需要自己判断,直接写在相应函数里
def get(self,request):
def post(self,request):
表单验证、数据库验证,同 def中的逻辑
# url 配置
from users.views import LoginView
url('^login/$',
LoginView.as_view(),
name='login'
)
前端
{% if request.user.is_authenticated %}
登陆后的 html
{% else%}
未登陆的 html
{% endif %}
注册
其他设置
链接中相对路径的写法
# 首先模板头部
{% load staticfiles %}
#url 的写法
{% url 'login' %}
{% url 'register' %}
# 静态文件的引用
{% static 'css/style.css' %} #static调用的是setting 中的 static url
邮件发送模块
新建 app:utils,建立email_send.py
from users.models import EmailVerifyRecord
生成随机串
见视频用户注册-3
邮箱登陆的支持
# 支持邮箱登陆,使用该方法不影响登录后台逻辑的代码
# views 里添加类
from django.contrib.auth.backends import ModelBackend
from django.models.db import Q
class CustomBackend(ModelBackend):
def authenticate(self,username=None,password=None,**kwargs)
try:
user = UserProfile.objects.get(Q(user= username)|Q(email=username))
if user.check_password(password):
return user
except:
return None
# setting 中重载认证配置
AUTHENTICATION_BACKEND=(
'users.views.CustomBackend', # 注意元组中只有一个数据的时候要加逗号
)
form 预处理
app 根目录建立 forms.py
from django import forms
class LoginForm(forms.Form):
user = forms.CharField(required = True)
pass = forms.CharField(min_length = 5)
# 变量名必须和 html 中的 input name 一样
view 中调用 form
from .forms import LoginForm
login_form = LoginForm(request.POST)
if login_form.is_valid():
真正的数据库验证逻辑
else:
回到登录页,并把 login_form 传给模板
#模板标注错误位置
<input class="{%if login_form.errors.user %}红边 css效果{%endif%}">
#显示错误信息
{%for key,error in login_form.errors.items%}
{{key}}:{{error}}
{%endfor}
验证码模块
github 搜索 django simple captcha
安装,版本必须选择0.4.6?
pip install ***==0.4.6
#forms.py
from captcha.fields import CaptchaField
#在类里生成验证码字段
captcha = CaptchaField(error_messages={'invalid captcha':'验证码错误'})
#views.py在页面的 get 方法中实例化表单,然后传给模板
#模板中
{{formname.captcha}}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。