Django+xadmin打造在线教育平台

Posted huiyichanmian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django+xadmin打造在线教育平台相关的知识,希望对你有一定的参考价值。

四、用户注册

1、用户基本注册get请求方式实现

(1)准备工作

 将资料包中的register.html文件复制到templates目录下。

(2)编写视图函数

# users/views.py

def register(request):
    if request.method == GET:
        return render(request, register.html)

(3)配置子路由

# users/usl.py

from users.views import register

app_name = users

urlpatterns = [
    path(register, register, name=register)
]

(4)修改base.html中注册的url

 <a style="color:white" class="fr registerbtn" href="{% url ‘users:register‘ %}">注册</a>

启动项目,进入首页点击“注册”,页面正常跳转。

技术图片

 

 

2、用户基本注册post请求方式实现(使用form组件)

(1)修改register.html页面form表单提交路径

<form id="email_register_form" method="post" action="{% url ‘users:register‘ %}" autocomplete="off">

(2)加入防跨域攻击(在form标签下)

{% csrf_token %}

 (3)编写forms.py脚本

# users/forms.py

from django import forms


class UserRegisterForm(forms.Form):   
    email = forms.EmailField(required=True)   # 规定用户名就是email,不能为空
    password = forms.CharField(required=True, min_length=6, max_length=16, error_messages={
        required: 密码不能为空,
        min_length: 密码至少6位,
        max_length: 密码不能超过16位
    })

(4)编写试图函数

from django.shortcuts import render, redirect
from django.urls import reverse

from users.models import UserProfile
from users.forms import UserRegisterForm
from django.db.models import Q


def index(request):
    return render(request, index.html)


def register(request):
    if request.method == GET:
        return render(request, register.html)
    else:
        user_register_form = UserRegisterForm(request.POST)
        if user_register_form.is_valid():  # 判断是否合法
            email = user_register_form.cleaned_data[email]
            password = user_register_form.cleaned_data[password]

            user_list = UserProfile.objects.filter(Q(username=email) | Q(email=email))
            if user_list:
                return render(request, register.html, {
                    msg: 用户已经存在
                })
            else:
                a = UserProfile()
                a.username = email    # 用户名存库
                a.set_password(password)   # 密码存库,经过处理
                a.email = email
                a.save()  # 保存
                return redirect(reverse(index.html))
        else:
            return render(request, register.html,{
                user_register_form: user_register_form
            })

(5)、修改register,html文件,加入报错信息

找到form抱歉下的name=‘error btns‘的div,动态添加报错信息

{{ msg }}
{% for key,err in user_register_form.items %}
      {{ err }}
{% endfor %}                            

启动项目进行验证。

技术图片

 

 如图我们故意输错,会给我们提示错误。按要求输入会自动跳转到首页。

技术图片
<!DOCTYPE html>
{% load staticfiles %}
<html>

<head>
    <meta charset="UTF-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
    <title>{% block title %}

    {% endblock %}</title>
    <link rel="stylesheet" type="text/css" href="{% static ‘css/reset.css‘ %}">
    <link rel="stylesheet" type="text/css" href="{% static ‘css/animate.css‘ %}">
    <link rel="stylesheet" type="text/css" href="{% static ‘css/style.css‘ %}">
    {% block mycss %}

    {% endblock %}
    <script src="{% static ‘js/jquery.min.js‘ %}" type="text/javascript"></script>
    <script src="{% static ‘js/jquery-migrate-1.2.1.min.js‘ %}" type="text/javascript"></script>

</head>
<body>
<section class="headerwrap ">
    <header>
        <div  class=" header">
             <div class="top">
                <div class="wp">
                    <div class="fl"><p>服务电话:<b>8888888</b></p></div>
                    <!--登录后跳转-->

                        {% if request.user.is_authenticated %}
                            <div class="personal">
                            <dl class="user fr">
                                <dd>weesmile<img class="down fr" src="{% static ‘images/top_down.png‘ %}"/></dd>
                                <dt><img width="20" height="20" src="{% static ‘images/touxiang.jpg‘ %}"/></dt>
                            </dl>
                            <div class="userdetail">
                                <dl>
                                    <dt><img width="80" height="80" src="{% static ‘images/touxiang.jpg‘ %}"/></dt>
                                    <dd>
                                        <h2>django</h2>
                                        <p>weesmile</p>
                                    </dd>
                                </dl>
                                <div class="btn">
                                    <a class="personcenter fl" href="usercenter-info.html">进入个人中心</a>
                                    <a class="fr" href="/logout/">退出</a>
                                </div>
                            </div>
                        </div>
                        {% else %}
                            <a style="color:white" class="fr registerbtn" href="{% url ‘users:register‘ %}">注册</a>
                            <a style="color:white" class="fr loginbtn" href="login.html">登录</a>
                        
                        {% endif %}

                </div>
            </div>
            {% block middle %}
            <div class="middle">
                <div class="wp">
                    <a href="index.html"><img class="fl" src="{% static ‘images/logo1.png‘ %}"/></a>
                    <div class="searchbox fr">
                        <div class="selectContainer fl">
                            <span class="selectOption" id="jsSelectOption" data-value="course">
                                公开课
                            </span>
                            <ul class="selectMenu" id="jsSelectMenu">
                                <li data-value="course">公开课</li>
                                <li data-value="org">课程机构</li>
                                <li data-value="teacher">授课老师</li>
                            </ul>
                        </div>
                        <input id="search_keywords" class="fl" type="text" value="" placeholder="请输入搜索内容"/>
                        <img class="search_btn fr" id="jsSearchBtn" src="{% static ‘images/search_btn.png‘ %}"/>
                    </div>
                </div>
            </div>
            <nav>
                <div class="nav">
                    <div class="wp">
                        <ul>
                            <li class="active" ><a href="index.html">首页</a></li>
                            <li >
                                <a href="course-list.html">
                                    公开课<img class="hot" src="{% static ‘images/nav_hot.png‘ %}">
                                </a>
                            </li>
                            <li >
                                <a href="teachers-list.html">授课教师</a>
                            </li>
                            <li ><a href="org-list.html">授课机构</a></li>
                        </ul>
                    </div>
                </div>
            </nav>
            {% endblock %}
            </div>
    </header>
</section>
{% block content %}

{% endblock %}

{% block footer %}
<footer>
        <div class="footer">
            <div class="wp">
                <ul class="cont">
                    <li class="logo"><a href=""><img src="{% static ‘images/logo1.png‘ %}"/></a></li>
                    <li class="code"><img src="{% static ‘images/code.jpg‘ %}"/><p class="center">扫描关注微信</p></li>
                    <li class="third"><img class="fl" src="{% static ‘images/tell.png‘ %}"/><p class="tell">88888888</p><p class="time">周一至周日 9:00-18:00</p></li>
                </ul>

            </div>
            <p class="line"></p>
            <div class="wp clear">
                <span class="fl">? 2012 www.atguigu.com谷粒教育-在线学习交流平台 保留所有权利</span>
                <span class="fr">copyright ? 2012 ICP备案证书号:蜀ICP备xxxxx号-1</span>
            </div>
        </div>
    </footer>
{% endblock %}


<section>
    <ul class="sidebar">
        <li class="qq">
            <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=2023525077&site=qq&menu=yes"></a>
        </li>
        <li class="totop"></li>
    </ul>
</section>
<script src="{% static ‘js/selectUi.js‘ %}" type=‘text/javascript‘></script>
<script src="{% static ‘js/deco-common.js‘ %}" type=‘text/javascript‘></script>
<script type="text/javascript" src="{% static ‘js/plugins/laydate/laydate.js‘ %}"></script>
<script src="{% static ‘js/plugins/layer/layer.js‘ %}"></script>
<script src="{% static ‘js/plugins/queryCity/js/public.js‘ %}" type="text/javascript"></script>
<script src="{% static ‘js/unslider.js‘ %}" type="text/javascript"></script>
<script src="{% static ‘js/plugins/jquery.scrollLoading.js‘ %}"  type="text/javascript"></script>
<script src="{% static ‘js/deco-common.js‘ %}"  type="text/javascript"></script>
<script type="text/javascript" src="{% static ‘js/index.js‘ %}"></script>
{% block myjs %}

{% endblock %}
</body>
</html>
base.html完整代码
技术图片
<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
    <meta charset="UTF-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
    <title>谷粒教育注册</title>
    <link rel="stylesheet" type="text/css" href="{% static ‘css/reset.css‘ %}">
    <link rel="stylesheet" type="text/css" href="{% static ‘css/login.css‘ %}">

</head>
<body>

<header>
    <div class="c-box fff-box">
        <div class="wp header-box">
            <p class="fl hd-tips">谷粒教育,在线学习平台!</p>
            <ul class="fr hd-bar">
                <li>服务电话:<span>88888888</span></li>
                <li><a href="login.html">[登录]</a></li>
                <li class="active"><a href="register.html">[注册]</a></li>
            </ul>
        </div>
    </div>
</header>
<section>
    <div class="c-box bg-box">
        <div class="login-box clearfix">
            <div class="hd-login clearfix">
                <a class="index-logo" href="index.html"></a>
                <h1>用户注册</h1>
                <a class="index-font" href="index.html">回到首页</a>
            </div>
            <div class="fl slide">
                <div class="imgslide">
                    <ul class="imgs">

                        <li><a href=""><img width="483" height="472" src="{% static ‘images/mysql.jpg‘ %}" /></a></li>

                        <li><a href=""><img width="483" height="472" src="{% static ‘images/mongoDB.jpg‘ %}" /></a></li>

                        <li><a href=""><img width="483" height="472" src="{% static ‘images/mysql.jpg‘ %}" /></a></li>

                    </ul>
                </div>
                <div class="unslider-arrow prev"></div>
                <div class="unslider-arrow next"></div>
            </div>
            <div class="fl form-box">
                <div class="tab">
                    <h2>邮箱注册</h2>
                </div>
                
                <div class="tab-form">
                    <form id="email_register_form" method="post" action="{% url ‘users:register‘ %}" autocomplete="off">
                        {% csrf_token %}
                        <div class="form-group marb20 ">
                            <label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
                            <input  type="text" id="id_email" name="email" value="None" placeholder="请输入您的邮箱地址" />
                        </div>
                        <div class="form-group marb8 ">
                            <label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
                            <input type="password" id="id_password" name="password"  value="None" placeholder="请输入6-20位非中文字符密码" />
                        </div>
                        <div class="form-group marb8 captcha1 ">
                            <label>&nbsp;&nbsp;</label>
                            <img src="/captcha/image/2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011/" alt="captcha" class="captcha" /> <input id="id_captcha_0" name="captcha_0" type="hidden" value="2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011" /> <input autocomplete="off" id="id_captcha_1" name="captcha_1" type="text" />
                        </div>
                        <div class="error btns" id="jsEmailTips">
                            {{ msg }}
                            {% for key,err in user_register_form.errors.items %}
                                {{ err }}
                            {% endfor %}
                        </div>
                        <div class="auto-box marb8">
                        </div>
                        <input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注册并登录" />
                    </form>
                </div>
                <p class="form-p">已有账号?<a href="login.html">[立即登录]</a></p>
            </div>
        </div>
    </div>
</section>

<input id="isLogin" type="hidden" value="False"/>
<script src="{% static ‘js/jquery.min.js‘ %}" type="text/javascript"></script>
<script src="{% static ‘js/unslider.js‘ %}" type="text/javascript"></script>
<script src="{% static ‘js/validateDialog.js‘ %}"  type="text/javascript"></script>
<script src="{% static ‘js/login.js‘ %}"  type="text/javascript"></script>
</body>
</html>
register.html完整代码

 

五、用户基本登录逻辑实现

 

以上是关于Django+xadmin打造在线教育平台的主要内容,如果未能解决你的问题,请参考以下文章

Django+xadmin打造在线教育平台

Django+xadmin打造在线教育平台

Django+xadmin打造在线教育平台

Django+xadmin打造在线教育平台

第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装

Django+xadmin打造在线教育平台