“一个人了解的业务逻辑越多越细,他就是越好的需求分析师。”
在软件系统架构中,软件一般分为三个层次:表示层、业务逻辑层和数据访问层:
业务逻辑的内容包括四个部分:



view.py
from django.shortcuts import render
from django.views import View
# Create your views here.
class ResgisterView(View):
""" 用户注册 """
def get(self, request):
""" 用于提供数据--用户注册页面 """
return render(request, 'register.html')
def post(self, request):
""" 实现用户注册业务逻辑 """
pass
因为采用的面向对象的类试图模式,所以子路由和主路由不用做任何改动。
目的:使用Vue.js的双向绑定实现用户交互和页面局部刷新的效果
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>商城-注册</title>
<link rel="stylesheet" type='text/css' href="../static/css/reset.css">
<link rel="stylesheet" type='text/css' href="../static/css/main.css">
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="app">
<div class="register_con">
<div class="l_con fl">
<a href="index.html" class="reg_logo"><img src="../static/images/logo.png" alt="">a>
<div class="reg_slogan">人美货全div>
<div class="reg_banner">div>
div>
div>
<div class="r_con fr">
<div class="reg_title clearfix">
<h1>用户注册h1>
<a href="login.html">登录a>
div>
<div class="reg_form clearfix">
<form method="post" class="register_form" @submit="on_submit" v-cloak>
{{ csrf_input }}
<ul>
<li>
<label for="">用户名:label>
<input type="text" v-model="username" @blur="check_username" name="username" id="user_name">
{ error_name_message }}用于显示不同类型的错误信息 -->
<span class="error_tip" v-show="error_name">[[ error_name_message ]]span>
li>
<li>
<label for="">密码:label>
<input type="password" v-model="password" @blur="check_password" name="password" id="pwd">
<span class="error_tip" v-show="error_password">请输入8-20位密码span>
li>
<li>
<label for="">确认密码:label>
<input type="password" v-model="password2" @blur="check_password2" name="password2" id="pwd2">
<span class="error_tip" v-show="error_password2">两次输入的密码不一样span>
li>
<li>
<label for="">手机号:label>
<input type="text" v-model="mobile" @blur="check_mobile" name="mobile" id="phone">
<span class="error_tip" v-show="error_mobile">[[ error_mobile_message ]]span>
li>
<li>
<label for="">图形验证码:label>
<input type="text" name="image_code" id="msg_input">
<img src="../static/images/pic_code.jpg" alt="图形验证码" class="pic_code">
<span class="error_tip" >请填写图形验证码span>
li>
<li>
<label for="">短信验证码label>
<input type="text" name="sms_code" id="sms_code" class="msg_input">
<a href="javascript:;" class="get_msg_code">获取短信验证码a>
<span class="error_tip" >请输入正确的手机短信验证码span>
li>
<li class="agreement">
<input type="checkbox" v-model="allow" @change="check_allow" name="allow" id="allow">
<label for="">同意“商城用户使用协议”label>
<span class="error_tip" v-show="error_allow">请勾选用户协议span>
li>
ul>
form>
div>
div>
div>
<script type="text/javascript" src="../static/js/register.js">script>
body>
var vm = new Vue({ // 创建Vue对象
// 通过id选择器找到绑定的HTML内容
el: '#app',
delimiters: ['[[', ']]'], // 修改Vue读取变量的语法
data: { // 绑定数据
// v-model
username: '',
password: '',
password2: '',
mobile: '',
allow: '',
// v-show
error_name: false,
error_password: false,
error_password2: false,
error_mobile: false,
error_allow: false,
// error_message
error_name_message: '',
error_mobile_message: '',
message: '',
},
methods: { // 定义和实现事件方法
// 校验用户名
check_username: function() {
// 用户名是5-20个字符,[a-z A-Z 0-9],正则校验
let re = /^[a-zA-Z0-9_-]{5,20}$/; // 定义正则规则
if (re.test(this.username)){ // 正则匹配
this.error_name = false; // 成功,不显示错误
} else { // 失败,显示错误
this.error_name_message = '请输入5-20个字符的用户名';
this.error_name = true;
}
},
// 校验密码
check_password: function() {
let re = /^[0-9a-zA-Z]{8,20}$/;
if (re.test(this.password)) {
this.error_password = false;
} else {
this.error_password = true;
}
},
// 校验确认密码
check_password2: function() {
if (this.password != this.password2) {
this.error_password2 = true;
} else {
this.error_password2 = false;
}
},
// 校验手机
check_mobile: function() {
let re = /^1[3-9]\d{9}$/;
if (re.test(this.mobile)) {
this.error_mobile = false;
} else {
this.error_mobile_message = '您输入的手机号格式不正确';
this.error_mobile = true;
}
},
// 校验是否勾选协议
check_allow: function() {
if (!this.allow) {
this.error_allow = true;
} else {
this.error_allow = false;
}
},
// 监听表单提交事件
on_submit: function() {
pass
},
},
});