form,ajax注册,logging日志使用
一.form表单类型提交注册信息


二.ajax版本提交注册信息

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/fontawesome/css/font-awesome.min.css">
<link rel="stylesheet" href="/static/sweetalert/sweetalert.css">
<style>
#show_avatar{
width: 80px;
height:80px;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="page-header">
<h1>博客园注册页面
<small>技术精英的地盘</small>
</h1>
</div>
</div>
<div class="row">
<div class="panel panel-primary">
<div class="panel-heading">
<div class="row">
<div class="col-md-6"><h3 class="panel-title"><i class="fa fa-user-secret fa-3x" aria-hidden="true"></i></h3></div>
<div class="col-md-6 "><i class="fa fa-users fa-3x pull-right " aria-hidden="true"></i></div>
</div>
</div>
<div class="panel-body">
<form class="form-horizontal" action="" method="post" novalidate enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
{# 如果这个字段有报错信息,那我就添加has-error的样式#}
<label for="{{ form_obj.username.id_for_label }}"
class="col-sm-2 control-label col-lg-push-2">{{ form_obj.username.label }}</label>
<div class="col-sm-4 col-lg-push-2">
{{ form_obj.username }}
<span class="help-block"></span>
</div>
</div>
<div class="form-group">
<label for="{{ form_obj.password.id_for_label }}"
class="col-sm-2 control-label col-lg-push-2">{{ form_obj.password.label }}</label>
<div class="col-sm-4 col-lg-push-2">
{{ form_obj.password }}
<span class="help-block"></span>
</div>
</div>
<div class="form-group ">
<label for="{{ form_obj.confirm_password.id_for_label }}"
class="col-sm-2 control-label col-lg-push-2">{{ form_obj.confirm_password.label }}</label>
<div class="col-sm-4 col-lg-push-2">
{{ form_obj.confirm_password }}
<span class="help-block"></span>
</div>
</div>
<div class="form-group">
<label for="{{ form_obj.phone.id_for_label }}"
class="col-sm-2 control-label col-lg-push-2">{{ form_obj.phone.label }}</label>
<div class="col-sm-4 col-lg-push-2">
{{ form_obj.phone }}
<span class="help-block"></span>
</div>
</div>
{# <div class="form-group {% if form_obj.email.errors.0 %}has-error{% endif %}">#}
{# <label for="{{ form_obj.email.id_for_label }}"#}
{# class="col-sm-2 control-label col-lg-push-2">{{ form_obj.email.label }}</label>#}
{# <div class="col-sm-4 col-lg-push-2">#}
{# {{ form_obj.email }}#}
{# <span style= }}</span>#}
{# </div>#}
{# </div>#}
{# <div class="form-group">#}
{# <label class="col-md-2 control-label col-lg-push-2">{{ form_obj.gender.label }}</label>#}
{# <div class="col-md-10 col-lg-push-2">#}
{# <div class="radio">#}
{# {% for radio in form_obj.gender %}#}
{# <label for="{{ radio.id_for_label }}">#}
{# {{ radio.tag }}{{ radio.choice_label }}#}
{# </label>#}
{# {% endfor %}#}
{# </div>#}
{# </div>#}
{# </div>#}
{# <div class="form-group">#}
{# <label class="col-md-2 control-label col-lg-push-2">{{ form_obj.hobby.label }}</label>#}
{# <div class="col-md-4 col-lg-push-2">#}
{# {{ form_obj.hobby }}#}
{# </div>#}
{# </div>#}
<div class="form-group">
<label for='id_avatar' class="col-sm-2 control-label col-lg-push-2">头像</label>
<div class="col-md-4 col-lg-push-2">
<label for="id_avatar"><img src="/static/img/default.png" alt="" id="show_avatar"></label>
<input type="file" name="avatar" id="id_avatar" style="display: none">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-5 col-sm-2">
<button type="button" class="btn btn-primary btn-block" id="b1">注册</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<script src="/static/jquery-3.3.1.min.js"></script>
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
<script src="/static/setup_Ajax.js"></script>
<script>
$('#b1').click(function () {
let formDataObj=new FormData();
formDataObj.append('username',$('#id_username').val());
formDataObj.append('password',$('#id_password').val());
formDataObj.append('confirm_password',$('#id_confirm_password').val());
formDataObj.append('phone',$('#id_phone').val());
formDataObj.append(].files[]);
$.ajax({
url:'',
type:'POST',
processData:false,
contentType:false,
data:formDataObj,
success:function (data) {
if (!data.flag){
location.href=data.data || '/middle/'
}else {
let errorMsg=data.data;
$.each(errorMsg,function (k,v) {
$(]).parent().parent().addClass('has-error')
})
}
}
})
});
$('#id_avatar').change(function () {
//拿到用户选中的头像文件
let FileObj=];
//读取文件路径
let fileReader=new FileReader();
fileReader.readAsDataURL(FileObj);
//等图片读取完毕之后,再做后续的操作
fileReader.onload=function () {
//设置预览图片
$('#show_avatar').attr('src',fileReader.result);
};
});
$('input').focus(function () {
$(this).next().text('').parent().parent().removeClass('has-error')
})
</script>
</body>
</html>
html
三.关于用户上传的文件类数据保存路径
用户提交的数据除了正常的文本信息外,还包含文件,图片,视频等信息,这些信息我们不可能记录到数据库中,而是创建一个文件目录将数据全部保存到该目录下,书库中只存放上传数据的路径,这里需要在Django settings.py中告诉Django

除了告诉Django你设置了这一个存放用户上传的文件类型的目录之外,你还需要在视图函数中添加特点的路由指示

四.logging日志模块
LOGGING = {
,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
'[%(levelname)s][%(message)s]'
},
'simple': {
'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
},
'collect': {
'format': '%(message)s'
}
},
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
* * , # 日志大小 50M
,
'formatter': 'standard',
'encoding': 'utf-8',
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"), # 日志文件
* * , # 日志大小 50M
,
'formatter': 'standard',
'encoding': 'utf-8',
},
'collect': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
* * , # 日志大小 50M
,
'formatter': 'collect',
'encoding': "utf-8"
}
},
'loggers': {
# 默认的logger应用如下配置
'': {
'handlers': ['default', 'console', 'error'], # 上线之后可以把'console'移除
'level': 'DEBUG',
'propagate': True,
},
# 名为 'collect'的logger还单独处理
'collect': {
'handlers': ['console', 'collect'],
'level': 'INFO',
}
},
}
赋值粘贴即可使用版本
进阶,如果我让你记录所有访问我Django项目的请求方法,你该如何进行日志的记录?
这个时候就可以结合我们学到的中间件来帮我们实现一劳永逸的效果,废话不多说直接上图




form,ajax注册,logging日志使用的更多相关文章
- django中介模型,CBV模型,及logging日志配制
1.中介模型 中介模型,这个是在我们创建表格时,多对多添加的时候应用到的,通过制定ManyToManyField字段中的through参数来定义,为两者的关系新建一个中介class 为什么会产生这个中 ...
- python 自动化之路 logging日志模块
logging 日志模块 http://python.usyiyi.cn/python_278/library/logging.html 中文官方http://blog.csdn.net/zyz511 ...
- 第一百六十节,封装库--JavaScript,ajax注册表单到数据库
封装库--JavaScript,ajax注册表单到数据库 效果图 前台js var biaodan = $().xu_lie_biao_dan($('form').sh_jd()); //序列化获取表 ...
- logging日志模块详细,日志模块的配置字典,第三方模块的下载与使用
logging日志模块详细 简介 用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么 了,但是当我需要看大量的地方或者在一个文件中查看的时 ...
- logging 日志模块学习
logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...
- logging日志模块
为什么要做日志: 审计跟踪:但错误发生时,你需要清除知道该如何处理,通过对日志跟踪,你可以获取该错误发生的具体环境,你需要确切知道什么是什么引起该错误,什么对该错误不会造成影响. 跟踪应用的警告和错误 ...
- Ajax注册验证用户名是否存在 ——引自百度经验
Ajax注册验证用户名是否存在 http://jingyan.baidu.com/article/a948d6515fdf870a2dcd2e85.html
- python-整理-logging日志
python的日志功能模块是logging 功能和使用方式非常类似于log4 如何使用logging: # 导入日志模块import logging# 使用配置文件设置日志时,需要导入这个模块 imp ...
- 【转】python模块分析之logging日志(四)
[转]python模块分析之logging日志(四) python的logging模块是用来写日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分 ...
随机推荐
- ORACLE如何找到引起账号锁定的IP的一点思考与总结
在ORACLE数据库中,如果没有修改过FAILED_LOGIN_ATTEMPTS的话,默认10次尝试失败后就会锁住用户.此时再登录数据库,就会遇到ORA-28000: the account is l ...
- ORACLE获取SQL绑定变量值的方法总结
本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点.在此梳理.总结一下,方面日后查找.翻阅. 方法1:查询V$SQL V$SQL视图中 ...
- [20190319]shared pool latch与library cache latch的简单探究.txt
[20190319]shared pool latch与library cache latch的简单探究.txt --//昨天看Oracle DBA手记3:数据库性能优化与内部原理解析.pdf 电子书 ...
- [20170612]FOR ALL COLUMNS SIZE repeat(12c).txt
[20170612]FOR ALL COLUMNS SIZE repeat(12c).txt --//昨天看了https://jonathanlewis.wordpress.com/2017/06/0 ...
- XSS攻击介绍
一.概念 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞, ...
- MSSQL coalesce系统函数简介
转自:http://www.maomao365.com/?p=4390 一.coalesce函数简介 coalesce 系统函数,比ISNULL更强大,更方便的系统函数,coalesce可以接收多个参 ...
- mssql sql server ceiling floor 函数用法简介
摘自: http://www.maomao365.com/?p=5581摘要: 下文主要讲述ceiling.floor函数的功能及举例说明 一.ceiling floor函数功能简介 ceiling ...
- eclipse maven web
在eclipse中用maven创建web项目. 环境配置 C:\Users\xxx>java -versionjava version "1.8.0_121"Java(TM) ...
- EOS智能合约开发(三):EOS创建和管理账号
没有看前面文章的小伙伴可以看一下 EOS智能合约开发(一):EOS环境搭建和启动节点 EOS智能合约开发(二):EOS创建和管理钱包 创建好钱包.密钥之后,接下来你就可以创建账号了,账号是什么?账号保 ...
- KFCM算法的matlab程序
KFCM算法的matlab程序 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行简单的实现,并求其准确度. 作者:凯鲁嘎吉 - 博客园 http:// ...