2024年6月5日:
class RegisterView(forms.ModelForm):
confirm_password = forms.CharField(label='确认密码', widget=forms.PasswordInput(
attrs={"lay-reqtext": "请再次输入密码", 'placeholder': '确认密码', 'class': 'layui-input',
'lay-verify': "required", 'lay-affix': "eye"}))
code = forms.CharField(label='验证码', widget=forms.TextInput(
attrs={"lay-reqtext": "请输入验证码", 'placeholder': '验证码', 'class': 'layui-input',
'lay-verify': "required", 'lay-affix': "clear"}))
# 开发这里的时候调整过输入框样式及属性,出现点击注册按钮后,直接刷新页面,Model未把数据提交到数据库,也未任何出错提示。
# 反复检查,为下面fields为__all__时,要吧数据库中无需提交数据的字段排除。使用exclude排除。
# 或者使用 fields=['username', 'passward',.....] 需要展示出来的对应字段输入框
class Meta:
model = models.Users
fields = "__all__"
exclude = ['level', 'reg_time']
widgets = {
'username': forms.TextInput(
attrs={"lay-reqtext": "请输入用户名", 'placeholder': '用户名', 'class': 'layui-input',
'lay-verify': "required",
'lay-affix': "clear"}),
'password': forms.PasswordInput(
attrs={"lay-reqtext": "请输入密码", 'placeholder': '密码', 'class': 'layui-input',
'lay-verify': "required",
'lay-affix': "eye"}),
'nickname': forms.TextInput(
attrs={'placeholder': '昵称', 'class': 'layui-input', 'lay-affix': "clear"}),
'email': forms.EmailInput(
attrs={"lay-reqtext": "请输入邮箱", 'placeholder': '邮箱', 'class': 'layui-input',
'lay-verify': "required",
'lay-affix': "clear"}),
'phone': forms.TextInput(
attrs={"lay-reqtext": "请输入手机号", 'placeholder': '手机号', 'class': 'layui-input',
'lay-verify': "required",
'lay-affix': "clear"})
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
6月6日:
# 注册时昵称可以为空,但是又不能让其与数据库中的昵称重复。
# 数据验证时用空值与数据库中校验,因为有部分客户未填写昵称,所以出现已存在。
# 直接增加了个判断。
def clean_nickname(self):
nickname = self.cleaned_data.get('nickname')
# 非必填项,增加空字段判断,允许为空提交,不然会一直提示昵称已存在,影响注册
if nickname == '':
return None
exists = models.Users.objects.filter(nickname=nickname).exists()
if exists:
raise ValidationError('昵称已存在')
return nickname
20240606午休:
# 模板代码中,使用button装在图片实现验证码刷新。可能是HTML与浏览器的缘故,无法实现。点击不动。也出现过能点动,但是自动绑定为提交按钮效果了。更换为图片事件点击实现刷新。
<div style="margin-left: 11px;">
<button type="button" style="border: none">
<img title="点击重新获取"
onclick="this.setAttribute('src','/users/image/code/?random='+Math.random())"
src="{% url 'image_code' %}" alt="刷新验证码">
</button>
</div>
2024年6月7日
问题描述:layui的tips吸附,遇到Django生成的input框可以正常生成,但是选择框select无法吸附问题。
查看代码,发现生成的input框是有独立ID的,select也有ID,搜索框层面上的input 选择框没有id,
JS里按ID搜索出来吸附不上选择框,如图所示飘出去了。
尝试了各种方法,查找select后面的input也可以吸附,但是我比较菜鸟,这样就会造成重复吸附现象。
还尝试过在后端把Django的选择框外观设置为单选框,也可以自动吸附。还尝试过Models里吧选择框设置为两条有默认值的就无需显示这个吸附狂,这样就有缺陷,默认选择总体不好吧。
最后使用$("#id_" + name).parent()方法直接定位相关$("#id_" + name)属性的父级元素。显示正常了。解决。
<script>
/**
* 使用layui框架的layer模块,用于弹出窗口提示信息。
*/
layui.use(['layer'], function () {
var layer = layui.layer;
/**
* jQuery文档加载完毕后执行的函数,用于初始化页面中的按钮事件。
*/
$(function () {
btn();
})
/**
* 初始化页面按钮的事件处理函数。
* 主要处理添加按钮的点击事件。
*/
function btn() {
$("#btnAdd").click(function () {
// 使用AJAX发送POST请求,提交表单数据。
$.ajax({
url: "/quest/add/",
type: "post",
data: $("#formAdd").serialize(),
dataType: "JSON",
success: function (res) {
// 根据返回的结果进行处理。
if (res.status) {
// 添加成功,提示用户并刷新页面。
layer.msg("恭喜您,添加成功", {icon: 1});
location.reload();
} else {
// 添加失败,遍历错误信息并显示在对应字段上。
$.each(res.error, function (name, data) {
// 通过元素id获取其父元素,为后续操作定位到具体的id元素的父div
var selectDiv = $("#id_" + name).parent();
if (selectDiv.length) {
// 使用layer的tips功能显示错误提示。
layer.tips(data[0], selectDiv, {
tips: [1, '#16b777'], // tips方向为上方,颜色为绿色
tipsMore: true,
});
}
});
}
}
});
});
}
});
</script>
评论前必须登录!
注册