静态文件目录的配置

项目根目录创建 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

  1. 判断POST,GET,据此返回页面或判断用户名密码
  2. POST 逻辑中,取回参数,用 authenticate 函数认证,成功则返回 user 对象
  3. 判断 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}}
文章目录