博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django打造在线教育平台_day_4: 页面(首页、登录)配置与登录功能实现
阅读量:4605 次
发布时间:2019-06-09

本文共 3447 字,大约阅读时间需要 11 分钟。

一、文件目录分析

MxOnline/urls.py:链接入口,关联到对应的views.py中的一个类(函数),访问的链接就对应一个类templates:存放html文件夹user(app)/adminx.py:后台文件user(app)/form.py:表单,用户在浏览器上输入提交,对数据的验证工作以及输入框的生成工作user(app)/models.py:与数据库操作相关,存入或者读取数据时使用。user(app)/views.py:处理用户发出的请求,从urls.py中对应而来,通过渲染templates中的网页可以为用户显示页面内容。

二、配置首页与登录页面

1、把index.html(首页)与login.html(登录)文件复制到项目templates目录下

3、在urls.py文件夹中配置index.html(首页)与login.html(登录)

from django.conf.urls import urlfrom django.views.generic import TemplateViewimport xadminfrom users.views import LoginViewurlpatterns = [    url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),  # 首页    url(r'^login/$', LoginView.as_view(), name='login'),  # 登录页面]

4、在settings.py文件中配置静态文件路径

#在文件最后添加STATICFILES_DIRS = (    os.path.join(BASE_DIR, 'static'),  #配置css\js\images\media文件路径)#实现自定义登录功能(用户名和邮箱都可以登录)AUTHENTICATION_BACKENDS = (    'users.views.CustomBackend',)

5、修改index.htm与login.htmll文件:

    {% load staticfiles %} # 添加,让链接修改起作用    
#修改前:../css/reset.css   
#修改css\js\images\media   
  ......   
#输入框错误高亮显示   
{% for key,error in login_form.errors.items%}{
{ error }}{% endfor %}{
{ msg }}
# 错误提示   {% csrf_token %} # 解决:禁止访问,CSRF验证失败,相应中段的错误   
  
{% if request.user.is_authenticated %} #登录成功,显示个人中心  
......
{% else %} # 否则显示登录页面  注册  登录{% endif %}
 

二、登录功能实现

 

1、功能分析

  表单输入验证form.py

  后端验证views.py

  用户名和邮箱登录views.py

3、在form.py文件中实现表单输入验证

from django import formsclass LoginForm(forms.Form):    """表单输入预检查功能(在链接数据库之前)"""    # username\password两个变量与相应htmlform表单中的name要完全一样,不然功能无效    username = forms.CharField(required=True)  # required=True输入不能为空    password = forms.CharField(required=True, min_length=8)  # 最小长度8

4、在views.py文件中实现后端验证与用户(邮箱登录)

from django.db.models import Qfrom django.views.generic.base import Viewfrom django.contrib.auth.hashers import make_password  # 对密码加密模块from .models import UserProfileclass CustomBackend(ModelBackend):    """自定义邮箱与账户登录"""    def authenticate(self, username=None, password=None, **kwargs):        try:            user = UserProfile.objects.get(Q(username=username)|Q(email=username))  # 用户名与Email验证            if user.check_password(password):  # 验证密码                return user        except Exception as e:            return Noneclass LoginView(View):    """登录功能"""    def get(self, request):        # get请求直接返回页面        return render(request, "login.html", {})    def post(self, request):        login_form = LoginForm(request.POST)        if login_form.is_valid():            # 输入通过LoginForm验证,链接数据库验证            # 取用户输入值            user_name = request.POST.get('username', '')            pass_word = request.POST.get('password', '')            # 向数据库发起验证请求用户名和密码是否正确            # 正确会返回一个对象, 不正确会返回None            user = authenticate(username=user_name, password=pass_word)            if user is not None:                # 数据库匹配正确                if user.is_active:  # 账户已激活                    login(request, user)  # 调用登录模块                    return render(request, 'index.html')                else:                    return render(request, "login.html", {
'msg': "账户未激活,请到邮箱激活"}) else: # 数据库匹配不正确 return render(request, "login.html", {
'msg': "用户名或者密码错误"}) else: # 输入没通过LoginForm验证,返回错误原因给前端 return render(request, "login.html", {
'login_form': login_form})

 

转载于:https://www.cnblogs.com/jp-mao/p/7073469.html

你可能感兴趣的文章
php--php设计模式留存
查看>>
LeetCode 682. Baseball Game
查看>>
基础训练 阶乘计算
查看>>
Swift函数_外部参数名,
查看>>
《DSP using MATLAB》示例Example4.4
查看>>
Ubuntu下Mysql中文乱码问题解决方案
查看>>
[LeetCode] 323. Number of Connected Components in an Undirected Graph 无向图中的连通区域的个数...
查看>>
What's binary search?
查看>>
[LeetCode] 141. Linked List Cycle 链表中的环
查看>>
[kuangbin带你飞]专题十七 AC自动机
查看>>
mac和virtualbox虚拟机共享
查看>>
【Linux】Centos7 入门到放弃记录
查看>>
Defect Analysis
查看>>
字符乱码 转化
查看>>
WPF界面设计风格资源库
查看>>
兼容问题大汇总
查看>>
团队作业记账本开发NABCD
查看>>
# 20175329 2018-2019-2 《Java程序设计》第一周学习总结
查看>>
Android模拟器Genymotion安装向导
查看>>
USB
查看>>