Django框架学习

阅读: 评论:0

Django框架学习

Django框架学习

ORM操作

            select * from tb where id >1

Django中:models.tb.objects.filter(id__gt=1)   

            select * from tb where id =1

Django中:models.tb.objects.filter(id=1)   

            select * from tb where id <1

Django中:models.tb.objects.filter(id__lt=1)   

 

#############################   2、    视图函数         #################################################
1request.GETrequest.POSTrequest.FILES2   #checkbox  等多选内容
            POST取值 多选框   list("favor")3   #上传文件 form  表单要设置  enctype="multipart/form-data"
    obj=("fafafa")obj.namef=open(obj.name ,"wb")for item in obj,chunks():f.write(item)f.close()4   FBV&CBV       function base view        class base viewurl.pyindex  ->   函数名view.pydef 函数(req):...=====>/index/  ->  function/index/  ->  类方法url.pyurl(r'^home/',views.Home.as_view()),view.pyfrom django.views import Viewclass Home(View):def get(self,req):return render(req,"home.html")def post(self,req):pass#############################   1、    路由系统         #################################################1、Django请求的生命周期-> URL对应关系(匹配)  -> 视图函数   ->  返回用户字符串-> URL对应关系(匹配)  -> 视图函数   ->  打开一个HTML文件,读取内容2、创建django projectdjango-admin startproject   mysite(项目名称)mysite ......cd mysitepython manage.py startapp blog(程序名称)3、配置模板路径静态文件路径#CSRF4、编写程序a. url.py/index/  ->  funcb. views.pydef func(request):#包含请求数据
            ...return HttpResponse("字符串")return render(request,"index.html",{""})return redirect("URL")c. 模板语言return render(request,"index.html",{""}){% for item in dic1 %}<h1>{{item}}</h1>{% endfor %}索引取值>>>>>>>>>>>>>   万能的点   <h2> {{ item.1 }} </h2>
View Code

 路由

ib import admin
from django.urls import path,re_path
from blog import views
urlpatterns = [path('admin/', admin.site.urls),re_path('^index/',views.index),#re_path('^detail/', views.detail),re_path('^detail-(d+).html', views.detail),#动态路由]
from django.shortcuts import render,HttpResponse# Create your views here.
# dic={
#     "k1": "root1",
#     "k2": "root2",
#     "k3": "root3",
#     "k4": "root4",
#
# }
USER_DICT={"1":{'name':'root1','email':'root1@163'},"2": {'name': 'root2', 'email': 'root2@163'},"3": {'name': 'root3', 'email': 'root3@163'},"4": {'name': 'root4', 'email': 'root4@163'},"5": {'name': 'root5', 'email': 'root5@163'},}def index(req):return render(req,"index.html",{"user_dict":USER_DICT})# def  detail(req):
#     nid=("nid")
#     detail_info=USER_DICT[nid]
#     return render(req,"detail.html",{"detail_info":detail_info})
def  detail(req,nid):return HttpResponse(nid)# nid=("nid")# detail_info=USER_DICT[nid]# return render(req,"detail.html",{"detail_info":detail_info})
View Code
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><ul>{% for k,row in user_dict.items %}<li><a target="_blank" href="/detail-{{k}}.html">{{row.name}}</a></li>{% endfor %}</ul>
</body>
</html>
View Code
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>详细信息</h1>
<h4>用户名: {{detail_info.name}}</h4>
<h4>邮箱:{{ail}}</h4></body>
</html>
View Code

 


 

 

 

 

 

def orm(request):#创建数据1# models.ate(#     username='root',#     password='123',# )#创建数据2# obj=models.UserInfo(#     username='admin',#     password='123',# )# obj.save()# 创建数据3# dic={"username":"李逵","password":"333"}# models.ate( **dic )#查数据#result=models.UserInfo.objects.all()#查所有# result=models.UserInfo.objects.filter(id__gt=3,password=123)#条件查询  filter相当于while# # print(result)# for i in result:#     print(i.id,i.username,i.password)#删数据# models.UserInfo.objects.all().delete()# models.UserInfo.objects.filter(id=4).delete()#更新# models.UserInfo.objects.all().update(password=666)models.UserInfo.objects.filter(id=3).update(password=222)return HttpResponse("orm")

 

 

"""mysite URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
ib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('cmdb/', include('blog.urls'))
]
mysite/urls.py
from django.urls import path,re_path
from blog import views
urlpatterns = [re_path('^login/',views.login),re_path('^orm/', ),re_path('^index/',views.index),re_path('^user_info',views.user_info),re_path('^user_group', views.user_group),re_path('^user_detail-(?P<nid>d+)',views.user_detail),re_path('^user_del-(?P<nid>d+)', views.user_del),re_path('^user_edit-(?P<nid>d+)', views.user_edit),]
blog/urls.py
from django.shortcuts import render,HttpResponse,redirect# Create your views here.def login(request):hod=="GET":return render(request,"login.html")hod=="POST":u=('user')p=('pwd')obj=models.UserInfo.objects.filter(username=u,password=p).first()print(obj)if obj:return render(request,"index.html")else:return render(request,"login.html")else:return HttpResponse("不是get /post")from blog import models
def orm(request):#创建数据1# models.ate(#     username='root',#     password='123',# )#创建数据2# obj=models.UserInfo(#     username='admin',#     password='123',# )# obj.save()# 创建数据3# dic={"username":"李逵","password":"333"}# models.ate( **dic )#查数据#result=models.UserInfo.objects.all()#查所有# result=models.UserInfo.objects.filter(id__gt=3,password=123)#条件查询  filter相当于while# # print(result)# for i in result:#     print(i.id,i.username,i.password)#删数据# models.UserInfo.objects.all().delete()# models.UserInfo.objects.filter(id=4).delete()#更新# models.UserInfo.objects.all().update(password=666)models.UserInfo.objects.filter(id=3).update(password=222)return HttpResponse("orm")def index(request):return render(request,"index.html")def user_group(request):pass
def user_info(request):hod=="GET":user_list=models.UserInfo.objects.all()# print(user_list.query)return render(request,"user_info.html",{"user_list":user_list})hod=="POST":u=("user")p=("pwd")models.ate(username=u,password=p)return redirect("/cmdb/user_info/")def user_detail(requset,nid):obj=models.UserInfo.objects.filter(id=nid).first()#models.(id=nid)取单条数据 如果不存在 报错return render(requset,"user_detail.html",{"obj":obj})def user_del(request,nid):models.UserInfo.objects.filter(id=nid).delete()return redirect("/cmdb/user_info/")def user_edit(request,nid):hod=="GET":obj=models.UserInfo.objects.filter(id=nid).first()return render(request,"user_edit.html",{"obj":obj})hod=="POST":nid=("id")u=("username")p=("pwd")models.UserInfo.objects.filter(id=nid).update(username=u,password=p)return redirect("/cmdb/user_info/")
blog/views.py

 

 

AutoField(Field)- int自增列,必须填入参数 primary_key=TrueBigAutoField(AutoField)- bigint自增列,必须填入参数 primary_key=True注:当model中如果没有自增列,则自动会创建一个列名为id的列from django.db import modelsclass UserInfo(models.Model):# 自动创建一个列名为id的且为自增的整数列username = models.CharField(max_length=32)class Group(models.Model):# 自定义自增列nid = models.AutoField(primary_key=True)name = models.CharField(max_length=32)SmallIntegerField(IntegerField):- 小整数 -32768 ~ 32767PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)- 正小整数 0 ~ 32767IntegerField(Field)- 整数列(有符号的) -2147483648 ~ 2147483647PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)- 正整数 0 ~ 2147483647BigIntegerField(IntegerField):- 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807自定义无符号整数字段class UnsignedIntegerField(models.IntegerField):def db_type(self, connection):return 'integer UNSIGNED'PS: 返回值为字段在数据库中的属性,Django字段默认的值为:'AutoField': 'integer AUTO_INCREMENT','BigAutoField': 'bigint AUTO_INCREMENT','BinaryField': 'longblob','BooleanField': 'bool','CharField': 'varchar(%(max_length)s)','CommaSeparatedIntegerField': 'varchar(%(max_length)s)','DateField': 'date','DateTimeField': 'datetime','DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)','DurationField': 'bigint','FileField': 'varchar(%(max_length)s)','FilePathField': 'varchar(%(max_length)s)','FloatField': 'double precision','IntegerField': 'integer','BigIntegerField': 'bigint','IPAddressField': 'char(15)','GenericIPAddressField': 'char(39)','NullBooleanField': 'bool','OneToOneField': 'integer','PositiveIntegerField': 'integer UNSIGNED','PositiveSmallIntegerField': 'smallint UNSIGNED','SlugField': 'varchar(%(max_length)s)','SmallIntegerField': 'smallint','TextField': 'longtext','TimeField': 'time','UUIDField': 'char(32)',BooleanField(Field)- 布尔值类型NullBooleanField(Field):- 可以为空的布尔值CharField(Field)- 字符类型- 必须提供max_length参数, max_length表示字符长度TextField(Field)- 文本类型EmailField(CharField):- 字符串类型,Django Admin以及ModelForm中提供验证机制IPAddressField(Field)- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制GenericIPAddressField(Field)- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6- 参数:protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both"URLField(CharField)- 字符串类型,Django Admin以及ModelForm中提供验证 URLSlugField(CharField)- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)CommaSeparatedIntegerField(CharField)- 字符串类型,格式必须为逗号分割的数字UUIDField(Field)- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证FilePathField(Field)- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能- 参数:path,                      文件夹路径match=None,                正则匹配recursive=False,           递归下面的文件夹allow_files=True,          允许文件allow_folders=False,       允许文件夹FileField(Field)- 字符串,路径保存在数据库,文件上传到指定目录- 参数:upload_to = ""      上传文件的保存路径storage = None      存储组件,默认files.storage.FileSystemStorageImageField(FileField)- 字符串,路径保存在数据库,文件上传到指定目录- 参数:upload_to = ""      上传文件的保存路径storage = None      存储组件,默认files.storage.FileSystemStoragewidth_field=None,   上传图片的高度保存的数据库字段名(字符串)height_field=None   上传图片的宽度保存的数据库字段名(字符串)DateTimeField(DateField)- 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]DateField(DateTimeCheckMixin, Field)- 日期格式      YYYY-MM-DDTimeField(DateTimeCheckMixin, Field)- 时间格式      HH:MM[:ss[.uuuuuu]]DurationField(Field)- 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型FloatField(Field)- 浮点型DecimalField(Field)- 10进制小数- 参数:max_digits,小数总长度decimal_places,小数位长度BinaryField(Field)- 二进制类型
字段
null                数据库中字段是否可以为空db_column           数据库中字段的列名db_tablespacedefault             数据库中字段的默认值primary_key         数据库中字段是否为主键db_index            数据库中字段是否可以建立索引unique              数据库中字段是否可以建立唯一索引unique_for_date     数据库中字段【日期】部分是否可以建立唯一索引unique_for_month    数据库中字段【月】部分是否可以建立唯一索引unique_for_year     数据库中字段【年】部分是否可以建立唯一索引verbose_name        Admin中显示的字段名称blank               Admin中是否允许用户输入为空editable            Admin中是否可以编辑help_text           Admin中该字段的提示信息choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date如:{'null': "不能为空.", 'invalid': '格式错误'}validators          自定义错误验证(列表类型),从而定制想要的验证规则validators import validators import EmailValidator,URLValidator,DecimalValidator,MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator如:test = models.CharField(max_length=32,error_messages={'c1': '优先错信息1','c2': '优先错信息2','c3': '优先错信息3',},validators=[RegexValidator(regex='root_d+', message='错误了', code='c1'),RegexValidator(regex='root_112233d+', message='又错误了', code='c2'),EmailValidator(message='又错误了', code='c3'), ])
参数
class UserInfo(models.Model):nid = models.AutoField(primary_key=True)username = models.CharField(max_length=32)class Meta:# 数据库中生成的表名称 默认 app名称 + 下划线 + 类名db_table = "table_name"# 联合索引index_together = [("pub_date", "deadline"),]# 联合唯一索引unique_together = (("driver", "restaurant"),)# admin中显示的表名称
            verbose_name# verbose_name加s
            verbose_name_plural更多:.10/ref/models/options/
元信息
1.触发Model中的验证和错误提示有两种方式:a. Django Admin中的错误信息会优先根据Admiin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息b. 调用Model对象的 clean_fields 方法,如:# models.pyclass UserInfo(models.Model):nid = models.AutoField(primary_key=True)username = models.CharField(max_length=32)email = models.EmailField(error_messages={'invalid': '格式错了.'})# views.pydef index(request):obj = models.UserInfo(username='11234', email='uu')try:print(obj.clean_fields())except Exception as e:print(e)return HttpResponse('ok')# Model的clean方法是一个钩子,可用于定制操作,如:上述的异常处理。2.Admin中修改错误提示# admin.ib import adminfrom model_club import modelsfrom django import formsclass UserInfoForm(forms.ModelForm):username = forms.CharField(error_messages={'required': '用户名不能为空.'})email = forms.EmailField(error_messages={'invalid': '邮箱格式错误.'})age = forms.IntegerField(initial=1, error_messages={'required': '请输入数值.', 'invalid': '年龄必须为数值.'})class Meta:model = models.UserInfo# fields = ('username',)fields = "__all__"class UserInfoAdmin(admin.ModelAdmin):form = ister(models.UserInfo, UserInfoAdmin)
拓展知识

 325   457

 

auto_now     -> 创建时,自动生成时间
auto_now_add    -> 更新时,自动更新为当前时间#obj=UerGroup.object.filter(id=1).update(caption="CEO")#这种方式是不会更新的。obj=UerGroup.object.filter(id=1).first()pbj.caption="CEO"#这种方式才会更新时间obj.save()

  

 

#获取用户提交的数据()()()#list()request.path_info

  

 

from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here.def business(request):v1 = models.Bussiness.objects.all().valuesv2=models.Bussiness.objects.all().values("id","caption")#QuerySet#[{},{},...] 字典v3 = models.Bussiness.objects.all().values_list("id", "caption")#[(),(),....]内部元素是元组return render(request,"business.html",{"v1":v1,"v2":v2,"v3":v3})def host(request):v1=models.Host.objects.filter(nid__gt=0)for row in v1:print(row.nid,row.hostname,row.ip,row.prot,row.b.caption)# return render(request,"host.html",{"v1":v1})v2 = models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b__caption')print(v2)#跨表取值 用双下划线v3 = models.Host.objects.filter(nid__gt=0).values_list('nid', 'hostname', 'b_id', 'b__caption')print(v3)  # 跨表取值 用双下划线return HttpResponse("ok")

  

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>业务线列表-对象</h1>
<ul>{%  for row in v1 %}<li>{{ row.id }}-{{ row.caption }}--{{ de }}</li>{% endfor %}
</ul>
<h1>业务线列表-字典</h1>
<ul>{%  for row in v2 %}<li>{{ row.id }}-{{ row.caption }}</li>{% endfor %}
</ul>
<h1>业务线列表-元组</h1>
<ul>{%  for row in v3 %}<li>{{ row.0 }}-{{ row.1}}</li>{% endfor %}
</ul>
</body>
</html>
View Code

 

 

 


 

10.16


 

 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<style>.hide{display: none}.shade{position: fixed;top:0;right: 0;bottom:0;left: 0;background-color: black;opacity: 0.6;z-index: 100;}.add-modal{position: fixed;height: 300px;width: 400px;top: 100px;left: 50%;margin-left: -200px;z-index: 101;border: 1px solid red;background-color: white;}
</style>
<body>
<h1>主机列表-对象</h1>
<input id="add_host" type="button" value="添加">
<table border="1" cellspacing="0"><tr><th>序号</th><th>主机名</th><th>IP</th><th>端口</th><th>业务线名称</th></tr>{%  for row in v1 %}<tr><td>{{ unter }}</td><td>{{ row.hostname }}</td><td>{{ row.ip }}</td><td>{{ row.prot }}</td><td>{{ row.b.caption }}</td></tr>{% endfor %}</table><div class="shade hide"></div>
<div class="add-modal hide">
<div style="padding: 20px "><form method="post" action="/host/"><p><input id="host" type="text" placeholder="主机名" name="hostname"/></p><p><input id="ip" type="text" placeholder="IP" name="ip"/></p><p><input id="prot" type="text" placeholder="端口" name="prot"/></p><p><select id="sel" name="b_id">{% for row in b_list %}<option value="{{ row.id }}">{{ row.caption }}</option>{% endfor %}</select></p><p><input type="submit" value="提交"/><a id="ajax_submit">悄悄发送消息</a></p><p><input id="cancel" type="button" value="取消"></p></form>
</div>
</div>
<script src="/static/jquery-3.3.1.min.js"></script>
<script>$(function () {$("#add_host").click(function () {$('.shade,.add-modal').removeClass("hide");})$("#cancel").click(function () {$('.shade,.add-modal').addClass("hide");})$("#ajax_submit").click(function () {$.ajax({url:"/test_ajax/",type:"POST",data:{"user":$("#host").val(),"ip":$("#ip").val(),"prot":$("#prot").val(),"b_id":$("#sel").val()},success:function (data) {if(data=="ok"){load()}else{alert(data)}}})})})
</script>
</body>
</html>

  

"""mysitedemo URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
ib import admin
from django.urls import path
from app01 import views
urlpatterns = [path('admin/', admin.site.urls),path('business/',views.business),path('host/',views.host),path('test_ajax/',st_ajax)
]
View Code
from django.db import models# Create your models here.
class Bussiness(models.Model):caption=models.CharField(max_length=32)code=models.CharField(max_length=32)class Host(models.Model):nid=models.AutoField(primary_key=True)hostname=models.CharField(max_length=32,db_index=True)ip=models.GenericIPAddressField(protocol="ipv4",db_index=True)prot=models.IntegerField()b=models.ForeignKey("Bussiness",to_field="id",on_delete=models.CASCADE)
View Code
"""
Django settings for mysitedemo project.Generated by 'django-admin startproject' using Django 2.1.1.For more information on this file, see
.1/topics/settings/For the full list of settings and their values, see
.1/ref/settings/
"""import os# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production
# See .1/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'df-*=bi#_19x^v7cn7-c31*bs270wi#o*)cm)4+qbh%v=(w23#'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = [&#ib.admin',&#ib.auth',&#ib.contenttypes',&#ib.sessions',&#ib.messages',&#ib.staticfiles','app01.apps.App01Config',
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware',&#ib.sessions.middleware.SessionMiddleware','django.middlewaremon.CommonMiddleware',#'django.middleware.csrf.CsrfViewMiddleware',&#ib.auth.middleware.AuthenticationMiddleware',&#ib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'mysitedemo.urls'TEMPLATES = [{'BACKEND': &#plate.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': [&#t_processors.debug',&#quest',&#t_processors.auth',&#ssages',],},},
]WSGI_APPLICATION = 'mysitedemo.wsgi.application'# Database
# .1/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}# Password validation
# .1/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': &#ib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': &#ib.auth.password_validation.MinimumLengthValidator',},{'NAME': &#ib.auth.password_validation.CommonPasswordValidator',},{'NAME': &#ib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# .1/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# .1/howto/static-files/STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR,"statices"),
)
View Code
from django.shortcuts import render,HttpResponse,redirect
from app01 import models
# Create your views here.def business(request):v1 = models.Bussiness.objects.all().valuesv2=models.Bussiness.objects.all().values("id","caption")#QuerySet#[{},{},...] 字典v3 = models.Bussiness.objects.all().values_list("id", "caption")#[(),(),....]内部元素是元组return render(request,"business.html",{"v1":v1,"v2":v2,"v3":v3})# def host(request):
#     v1=models.Host.objects.filter(nid__gt=0)
#     for row in v1:
#         print(row.nid,row.hostname,row.ip,row.prot,row.b.caption)
#     # return render(request,"host.html",{"v1":v1})
#     v2 = models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b__caption')
#     print(v2)#跨表取值 用双下划线
#     v3 = models.Host.objects.filter(nid__gt=0).values_list('nid', 'hostname', 'b_id', 'b__caption')
#     print(v3)  # 跨表取值 用双下划线
#     return render(request,"host.html",{"v1":v1})
def host(request):hod=="GET":b_list=models.Bussiness.objects.all()v1=models.Host.objects.filter(nid__gt=0)return render(request,"host.html",{"v1":v1,"b_list":b_list})hod=="POST":h=("hostname")i=("ip")p=("prot")b=("b_id")models.ate(hostname=h,ip=i,prot=p,b_id=b)return redirect("/host")
def test_ajax(request):hod,request.POST,sep="t")h = ("user")i = ("ip")p = ("prot")b = ("b_id")if h and len(h)>5:models.ate(hostname=h, ip=i, prot=p, b_id=b)return HttpResponse("ok")else:return HttpResponse("太短了")
View Code

 

li={"1":2,"3":4}
{1: 2, 3: 4}
li
{1: 2, 3: 4}
s=JSON.parse(li)
VM158:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1at JSON.parse (<anonymous>)at <anonymous>:1:8
(anonymous) @ VM157:1
s=JSON.stringify(li)
"{"1":2,"3":4}"
JSON.parse(s)
{1: 2, 3: 4}
js 的json 序列化和反序列化

 

 

$("#ajax_submit").click(function () {$.ajax({url:"/test_ajax/",type:"POST",//data:{"user":$("#host").val(),"ip":$("#ip").val(),"prot":$("#prot").val(),"b_id":$("#sel").val()},data:$("#add_form").serialize(),success:function (data) {var obj=JSON.parse(data);if (obj.status){load()}else{$("#error-msg").s);}}})})

  

def test_ajax(request):import jsonret={'status':True,'errors':None,'data':None}try:hod,request.POST,sep="t",end="n")# h = ("user")# i = ("ip")# p = ("prot")# b = ("b_id")#data_dic={}for row in request.POST:data_dic[row]=request.POST[row]print(data_dic)if data_dic["hostname"] and len(data_dic["hostname"])>5:models.ate(**data_dic)# return HttpResponse(data_dic["hostname"])else:ret['status']=Falseret['errors']="太短了"except Exception as e:ret['status']=Falseret['errors']='请求错误'return HttpResponse(json.dumps(ret))

  

 340 从入门到逼疯

 

 .html

 

转载于:.html

本文发布于:2024-01-29 02:51:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170646786912172.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:框架   Django
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23