ModelForm验证实例
程序目录

models.py
from django.db import models
# Create your models here.
class UserType(models.Model):
caption=models.CharField(max_length=32)
class UserGroup(models.Model):
name=models.CharField(max_length=32)
class UserInfo(models.Model):
username=models.CharField(max_length=32,verbose_name="用户名")
email=models.EmailField()
user_type=models.ForeignKey(to='UserType',to_field='id',on_delete=models.CASCADE)
u2g=models.ManyToManyField(UserGroup)
urls.py
"""s14_day24 URL Configuration
"""
from django.contrib import admin
from django.urls import path
from app01 import views
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
path('user_list/', views.user_list),
url('^edit-(\d+)/', views.user_edit),
url('^ajax/$', views.ajax),
url('^ajax_json/$', views.ajax_json),
url('^upload/$', views.upload),
url('^upload_file/$', views.upload_file),
url('^kind/$', views.kind),
url('^upload_img/$', views.upload_img),
url('^file_manager/$', views.file_manager),
]
views.py
from django.shortcuts import render,HttpResponse,redirect
from django import forms
from django.forms import fields as field
# Create your views here.
from app01 import models
from django.forms import widgets as fwidget
class UserInfoModelForm(forms.ModelForm):
is_rmb=field.CharField(widget=fwidget.CheckboxInput())
class Meta:
model=models.UserInfo #去哪个类获取字段
fields='__all__' #代指所有字段
# fields=['username'] #只获取uername列
# exclude=['username'] #排除username 别的都获取
labels={
'username':'用户',
'email':'邮箱',
}
help_texts={
'username':'帮助->输入用户名'
}
widgets={
'username':fwidget.Textarea(attrs={'class':'c1'})
}
error_messages={
'__all__':{
},
'email':{
'required':'邮箱不能为空',
'invalid':'邮箱格式错误'
}
}
field_classes={
# 'email':field.URLField
}
def clean_username(self):
old=self.cleaned_data['username']
return old
class UserInfoForm(forms.Form):
username=field.CharField(max_length=32)
email=field.EmailField()
user_type=field.ChoiceField(
choices=models.UserType.objects.values_list('id','caption')
)
def __init__(self,*args,**kwargs):#更新
super(UserInfoForm,self).__init__(*args,**kwargs)
self.fields['user_type'].choices=choices=models.UserType.objects.values_list('id','caption')
def index(request):
if request.method=="GET":
obj=UserInfoModelForm()
return render(request,'index.html',{'obj':obj})
elif request.method=="POST":
obj=UserInfoModelForm(request.POST)
if obj.is_valid():
# obj.save() #当前类和many_to_many都会保存
instance=obj.save(False)
instance.save() #只会保存当前的类,不会保存many_to_many
obj.save_m2m() #保存many_to_many
# print(obj.is_valid())
# print(obj.cleaned_data)
# print(obj.errors.as_json())
# models.UserInfo.objects.create(**obj.cleaned_data)
return render(request,'index.html',{'obj':obj})
def user_list(request):
li=models.UserInfo.objects.all().select_related('user_type') #关联外键 一对多
return render(request,'user_list.html',{'li':li})
def user_edit(request,nid):
# 获取当前id对象的用户信息
#显示用户已经存在的数据
if request.method=="GET":
user_obj=models.UserInfo.objects.filter(id=nid).first()
mf=UserInfoModelForm(instance=user_obj) #关联多对多
return render(request, 'user_edit.html',{'mf':mf,'nid':nid})
elif request.method=='POST':
user_obj = models.UserInfo.objects.filter(id=nid).first()
mf=UserInfoModelForm(request.POST,instance=user_obj) #request.POST 前台传递数据到后台 user_obj many_to_many都传进来 增加obj不加instance
if mf.is_valid():
mf.save()
else:
print(mf.errors.as_json())
return render(request, 'user_edit.html', {'mf': mf, 'nid': nid})
def ajax(request):
return render(request,'ajax.html')
def ajax_json(request):
print(request.POST)
ret={'status':True,'data':request.POST.get('username')}
import json
# return HttpResponse(json.dumps(ret),status=404,reason="Not Found")
return HttpResponse(json.dumps(ret))
def upload(request):
return render(request,'upload.html')
def upload_file(request):
username=request.POST.get('username')
fafafa=request.FILES.get('fafafa')
import os
img_path=os.path.join('static/image/',fafafa.name)
print(username,fafafa.name)
with open(img_path,'wb') as f:
for item in fafafa.chunks():
f.write(item)
ret = {'status': True, 'data': img_path}
import json
# return HttpResponse(json.dumps(ret),status=404,reason="Not Found")
return HttpResponse(json.dumps(ret))
def kind(request):
return render(request,'kind.html')
import json
def upload_img(request):
request.GET.get('dir')
#获取文件保存
dic = {
'error': 0,
'url': '/static/image/IMG_2236.JPG',
'message': '错误了...'
}
return HttpResponse(json.dumps(dic))
import os,time
def file_manager(request): #文件空间管理
"""
文件管理
:param request:
:return:
"""
dic = {}
root_path = 'D:/python_study/s14_day24/static'
static_root_path = '/static/'
request_path = request.GET.get('path')
if request_path:
abs_current_dir_path = os.path.join(root_path, request_path)
move_up_dir_path = os.path.dirname(request_path.rstrip('/'))
dic['moveup_dir_path'] = move_up_dir_path + '/' if move_up_dir_path else move_up_dir_path
else:
abs_current_dir_path = root_path
dic['moveup_dir_path'] = ''
dic['current_dir_path'] = request_path
dic['current_url'] = os.path.join(static_root_path, request_path)
file_list = []
for item in os.listdir(abs_current_dir_path):
abs_item_path = os.path.join(abs_current_dir_path, item)
a, exts = os.path.splitext(item)
is_dir = os.path.isdir(abs_item_path)
if is_dir:
temp = {
'is_dir': True,
'has_file': True,
'filesize': 0,
'dir_path': '',
'is_photo': False,
'filetype': '',
'filename': item,
'datetime': time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(os.path.getctime(abs_item_path)))
}
else:
temp = {
'is_dir': False,
'has_file': False,
'filesize': os.stat(abs_item_path).st_size,
'dir_path': '',
'is_photo': True if exts.lower() in ['.jpg', '.png', '.jpeg'] else False,
'filetype': exts.lower().strip('.'),
'filename': item,
'datetime': time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(os.path.getctime(abs_item_path)))
}
file_list.append(temp)
dic['file_list'] = file_list
return HttpResponse(json.dumps(dic))
index.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/index/" method="post">
{% csrf_token %}
{{ obj.as_p }}
<input type="submit" value="提交">
</form>
</body>
</html>
user_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for row in li %}
<li>{{ row.username }} - {{ row.user_type.caption }}-<a href="/edit-{{ row.id }}/">编辑</a></li>
{% endfor %}
</ul>
</body>
</html>
ajax.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{# {% csrf_token %}#}
<input type="text">
<input type="button" value="Ajax1" onclick="Ajax1()">
<!--
<input type="text" id="url"><input type="button" value="发送iframe请求" onclick="iframeRequest();">
<iframe id="if1" src="http://www.baidu.com"></iframe>
-->
<form action="/ajax_json/" method="post" target="ifm1"> <!--target="ifm1" 让form标签与iframe标签建立关系 form通过iframe提交到后台-->
<iframe id="ifm1" name="ifm1" ></iframe>
<input type="text" name="username">
<input type="text" name="email">
<input type="submit" onclick="submitForm();" value="Form提交">
</form>
<script type="text/javascript" src="/static/jquery-1.12.4.js"></script>
<script>
function getXHR(){
var xhr = null;
if(XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr;
}
function Ajax1() {
var x_h_r=new getXHR(); //XMLHttpRequest兼容性操作
x_h_r.open('POST','/ajax_json/',true);
x_h_r.onreadystatechange=function () {
if (x_h_r.readyState==4){
//接收完毕
{# console.log(x_h_r.responseText);#}
var obj=JSON.parse(x_h_r.responseText);
console.log(obj);
{# console.log(x_h_r.status);#}
{# console.log(x_h_r.statusText);#}
}
};
x_h_r.setRequestHeader('k1','v1');//额外发送的请求头
x_h_r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8'); //设置请求头 值才能发过去
x_h_r.send("name=root;pwd=123");
}
$.ajax({
success:function (arg,a1,a2) {
console.log(a2);//a2就是XMLHttpRequest对象
console.log(a2.readyState);
a2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8');
console.log(a2.status);
console.log(a2.statusText);
}
});
/*
function iframeRequest() {
var url=$('#url').val();
$('#if1').attr('src',url);
}
*/
function submitForm() {
$('#ifm1').load(function () {
var text= $('#ifm1').contents().find('body').text();
var obj=JSON.parse(text);
})
}
</script>
</body>
</html>
user_edit.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="/edit-{{ nid }}/">
{% csrf_token %}
{{ mf.as_p }}
<input type="submit" value="提交">
</form>
</body>
</html>
upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.upload{
display:inline-block;padding: 10px;
background-color: blue;
position: absolute;
top:0;
bottom:0;
right:0;
left:0;
z-index: 9;
}
.file{
width: 100px;height: 50px;opacity: 0;
position: absolute;
top:0;
bottom:0;
right:0;
left:0;
z-index: 10;
}
.div_class{
position: relative;width: 100px;height: 50px;
}
</style>
</head>
<body>
<div class="div_class">
<input class="file" type="file" id="fafafa" name="afafa">
<a class="upload">上传</a>
</div>
<input type="button" value="提交XHR" onclick="xhrSubmit();">
<input type="button" value="提交jQuery" onclick="jqSubmit();">
<hr/>
<form id="f1" action="/upload_file/" method="post" enctype="multipart/form-data" target="ifm1" > <!--target="ifm1" 让form标签与iframe标签建立关系 form通过iframe提交到后台-->
<iframe id="ifm1" name="ifm1" style="display: none;"></iframe>
<input type="file" name="fafafa" onchange="changeUp();">
<input type="submit" onclick="iframeSubmit();" value="iframe提交">
</form>
<div id="preview"></div>
<script type="text/javascript" src="/static/jquery-1.12.4.js"></script>
<script>
function changeUp() {
$('#ifm1').load(function () {
var text= $('#ifm1').contents().find('body').text();
var obj=JSON.parse(text);
console.log(obj);
$('#preview').empty();
var imgtag=document.createElement('img');
imgtag.src="/" + obj.data;
$('#preview').append(imgtag);
});
$('#f1').submit();
}
function xhrSubmit(){
{# $('#fafafa')[0]#}
var file_obj= document.getElementById('fafafa').files[0];
var fd=new FormData();
fd.append('username','root');
fd.append('fafafa',file_obj);
var x_h_r=new XMLHttpRequest();
x_h_r.open('POST','/upload_file/',true);
x_h_r.onreadystatechange=function () {
if (x_h_r.readyState==4){
//接收完毕
{# console.log(x_h_r.responseText);#}
var obj=JSON.parse(x_h_r.responseText);
console.log(obj);
{# console.log(x_h_r.status);#}
{# console.log(x_h_r.statusText);#}
}
};
x_h_r.send(fd);
}
function jqSubmit() {
var file_obj= document.getElementById('fafafa').files[0];
var fd=new FormData();
fd.append('username','root');
fd.append('fafafa',file_obj);
$.ajax({
url:'/upload_file/',
type:'POST',
data:fd,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success:function (arg,a1,a2) {
console.log(arg);
console.log(a1);
console.log(a2);
}
})
}
function iframeSubmit() {
$('#ifm1').load(function () {
var text= $('#ifm1').contents().find('body').text();
var obj=JSON.parse(text);
console.log(obj);
$('#preview').empty();
var imgtag=document.createElement('img');
imgtag.src="/" + obj.data;
$('#preview').append(imgtag);
})
}
</script>
</body>
</html>
kind.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div style="width: 500px;margin: 0 auto;">
<textarea id="content_1"></textarea>
<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/kindeditor-4.1.10/kindeditor-all.js"></script>
<script>
$(function () {
KindEditor.create('#content_1', {
width: '100%',
height: '300px',
minwidth: '80%',
minHeight: "260px",
{# items:["source",'fullscreen','preview', 'print', 'template', 'code', 'cut', 'copy', 'paste'],#}
noDisableItems: ["source", 'fullscreen', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste'],
{# designMode:false,#}
wellFormatMode: false,
useContextmenu: false,
fileManagerJson:'/file_manager/',
uploadJson: '/upload_img/',
{# allowImageUpload:false#}
autoHeightMode: true,
allowFileManager: true,
extraFileUploadParams: {
csrfmiddlewaretoken:"{{ csrf_token }}"
},
filePostName:'fafafa'
});
})
</script>
</div>
</body>
</html>
ModelForm验证实例的更多相关文章
- (实用篇)php通过会话控制实现身份验证实例
会话控制的思想就是指能够在网站中根据一个会话跟踪用户.这里整理了详细的代码,有需要的小伙伴可以参考下. 概述 http 协议是无状态的,对于每个请求,服务端无法区分用户.PHP 会话控制就是给了用户一 ...
- jQuery 验证实例(shopnc二次开发)
shopnc 商家用户实现添加用户与前台用户分离, jQuery 验证实例 equalTo:等于 <div id="saleRefund" show_id="1&q ...
- 未找到或无法访问服务器 请验证实例名称是否正确并且SQL Server 已配置为允许远程连接
无法连接到sql server 2008服务器 报下错误 其他信息 在与SQL Server建立连接时出现与网络相关的或特定于实例的错误 未找到或无法访问服务器请验证实例名称是否正确并且SQL ...
- 请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)
程序异常,错误信息:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (pro ...
- Django中Model-Form验证
Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...
- Bootstrap+PHP表单验证实例
简单实用的Bootstrap+PHP表单验证实例,非常适合初学者及js不熟悉者,还有ajax远程验证 js验证表单 1 $(document).ready(function() { 2 $('#def ...
- jQuery-easyui和validate表单验证实例
jQuery EasyUI 表单 - 表单验证插件validatebox 使用时需要向页面引入两个css文件如下: <link rel="stylesheet" href=& ...
- formValidator输入验证、异步验证实例 + licenseImage验证码插件实例应用
实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能清单: 1.springmvc控制器处理get请求(/member/login.html),进行静态页 ...
- Cookie && Session之验证实例
为了防止各种自动登录,以及反作弊和破坏,往往会要求登录时让用户输入随机产生的验证码(这组验证码是一组数字和字母),这样可以起到一定的防止他人利用程序让机器自动反复登录的情况.在PHP下要实现这种功能是 ...
- jquery-4 完整表单验证实例
jquery-4 完整表单验证实例 一.总结 一句话总结:在form的jquery对象中返回false即可终止表单提交. 1.验证的显示错误消息如何布局? 开始时隐藏,出现错误后显示 10 .erro ...
随机推荐
- Linux - vi & vim 编辑器
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计. vim 是从vi发展出来的一个文本编辑器.代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 使 ...
- 【论文随笔】推荐系统综述_推荐模型、推荐技术与应用领域(A Survey of Recommendation Systems_ Recommendation Models, Techniques, and Application Fields)
前言 今天读的论文为一篇于2022年1月3日发表的论文,这篇文章是关于推荐系统的综述,主要研究了推荐系统在不同服务领域的应用趋势,包括推荐模型.技术和应用领域.通过分析2010年至2021年间发表的顶 ...
- linux 删除文件提示 opration not permitted 处理方法(宝塔删除文件提示无法删除)
问题描述:linux系统中使用rm -rf强制删除文件,提示 opration not permitted,无法删除成功(宝塔删除文件提示无法删除),该问题确定为已关闭所有安全软件及防止恶意篡改的软件 ...
- 前端解析excel表格实现
1. 背景:在做react项目时,遇到一个解析excel的需求变更,把从原来后端解析变更为前端解析. 1.1 由于后端解析excel文件有安全隐患,因为项目中后端不允许上传文件,当然后端解析对前端来说 ...
- 解决ERROR 1231 (42000): Variable 'time_zone' can't
MySQL根据配置文件会限制Server接受的数据包大小.有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败.(比方说导入数据库,数据表) mysql 数据 ...
- 关于Primavera P6版本选择上的一些看法
从开始接触P6到目前也有近6年的时间,从最开始用的V7 (除P6.2.1)到现在用的18.8.0 ,除去一些小版本,中间自己跨越了8个不同版本 7.0, (2013) 8.2 ...
- 认识知识库与知识图谱:从CDSS的前世今生聊聊模型幻觉问题
提供AI咨询+AI项目陪跑服务,有需要回复1 今年很多医院已经部署上了DeepSeek,甚至有医生真的使用它对患者进行诊断,但马上就出问题了:AI 误诊,上海患者获赔 127 万. 不过,我去搜索详情 ...
- post数据到第三方,中文乱码
1.项目中发现 测试环境 推送正文,数据正常 2.生产到腾讯云之后,中文推送过去乱码,但是post 接口的 时候,指定了 编码格式. 3.后查看日志,发现日志中记录的中文就是乱码 4.排查cs代码文件 ...
- 【Linux】5.6 Shell打印输出指令
Shell打印输出命令 1. echo命令 Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出.命令格式:echo string 您可以使用echo实现更复杂的输出 ...
- EntityFramework GroupJoin
总而言之, GroupJoin 是先 Join 后 Group, 对应的 SQL 也是先 Join, 然后通过内置 LINQ 操作分组. 参考文档 GroupJoin 方法 Reimplementin ...