专业营销型网站建设公司,网站主机是什么,东莞企业名录网,做企业网站设计方案choices参数的使用 对于以上可能被我们列举完的字段我们一般都是选择使用choices参来做
class UserInfo(models.Model):username models.CharField(max_length64)password models.CharField(max_length32)# 先写一个映射关系gender_cho…choices参数的使用 对于以上可能被我们列举完的字段我们一般都是选择使用choices参来做
class UserInfo(models.Model):username models.CharField(max_length64)password models.CharField(max_length32)# 先写一个映射关系gender_choices ((1, 男),(2, 女),(3, 未知),)字段存储的范围还是取决于数据类型的字段gender models.SmallIntegerField(choicesgender_choices) # 男 女 未知 1 2 3 4# score A:优秀 B良好 C及格 D不及格score_choices((A, 优秀),(B, 良好),(C, 及格),(D, 不及格),)score models.CharField(choicesscore_choices,max_length32, nullTrue)resmodels.UserInfo.objects.filter(pk4).first()print(res.gender) # 1# get_字段名_display()# 如果你存储的数据没有在映射范围内就原样输出如果有就显示对应的关系对应的数据print(res.get_score_display())
MVC和MTV的模式 index.py index.controller.php index.controller.java # 控制器 C 它主要用来写整个项目的核心业务逻辑跟django的Views是一样的 V:views(模板层) Mmodel(模型层) 当你的项目非常大的时候还会在分一层:S层: services服务层 同一个数据库 各个端的登录功能登录的逻辑大致差不多 难道说每一个端都开发一个登录函数
def login(type): 相似的功能写在这里 Django的MTV分别是值
● M 代表模型Model 负责业务对象和数据库的关系映射(ORM)。 ● T 代表模板 (Template)负责如何把页面展示给用户(html)。 ● V 代表视图View 负责业务逻辑并在适当时候调用Model和Template。
多对多的三种创建方式
方法一通过ManyToManyField自动创建第三张表
class Book(models.Model):title models.CharField(max_length32, verbose_name书名)# 通过ORM自带的ManyToManyField自动创建第三张表
class Author(models.Model):name models.CharField(max_length32, verbose_name作者姓名)books models.ManyToManyField(toBook, related_nameauthors) 优点全自动可以使用 add set remove clear 四个方法
缺点可扩展性很差
方法二全手动
# 自己创建第三张表分别通过外键关联书和作者
class Book(models.Model):title models.CharField(max_length32, verbose_name书名)class Author(models.Model):name models.CharField(max_length32, verbose_name作者姓名)# 自己创建第三张表分别通过外键关联书和作者
class Author2Book(models.Model):author models.ForeignKey(toAuthor)book models.ForeignKey(toBook)register_time
优点可扩展性强
缺点不能使用add set remove clear 四个方法
方法三设置ManyTomanyField并指定自行创建的第三张表
class Book(models.Model):title models.CharField(max_length32, verbose_name书名)# 自己创建第三张表并通过ManyToManyField指定关联
class Author(models.Model):name models.CharField(max_length32, verbose_name作者姓名)books models.ManyToManyField(toBook, throughAuthor2Book, through_fields(author, book))# through_fields接受一个2元组field1field2# 其中field1是定义ManyToManyField的模型外键的名authorfield2是关联目标模型book的外键名。class Author2Book(models.Model):author models.ForeignKey(toAuthor)book models.ForeignKey(toBook)优点可扩展性强可以使用orm的方法和正反向查询
缺点不能使用add set remove clear 四个方法
Ajax技术
它是前端的技术不是Python的知识点但是它需要结合Python来学习 AJAX除了异步的特点外还有一个就是浏览器页面局部刷新1. 异步提交2. 局部刷新
Ajax的学习按理来说其实还是js代码应该学习JavaScript的Ajax的写法就不学习JavaScript版本的直接学习jQuery版本的帮我们封装了如果不封装js版本的Ajax非常复杂 document.getElementById(d1).innerHTML xmlhttp.responseText; document.getElementByClssName(c1).innerHTML xmlhttp.responseText; document.getElementById(d1).innerHTML xmlhttp.responseText; document.querySelector(#d1 a ).innerHTML xmlhttp.responseText; document.querySelector(.c1).innerHTML xmlhttp.responseText; document.querySelector(h1).innerHTML xmlhttp.responseText;
Ajax案例
有一个页面
script$(.btn).click(function () {var inp1 $(#inp1).val();var inp2 $(#inp2).val();// 把获取到的两个值提交到后端然后让Python来计算然后返回$.ajax({url:, // 默认不写就是朝当前地址传递type:post,dataType:json,data:{inp1:inp1, inp2:inp2},// 回调函数用来接收后端返回的数据success:function (res) {// {username: kevin, password: 123}console.log(res,) // 就是拿后端返回的数据// 反序列化{#resJSON.stringify()#}// 后端返回的数据别忘了反序列化但是你的护短别往了序列化{#resJSON.parse(res)#}console.log(typeof res) // 就是拿后端返回的数据console.log(res.username) // 就是拿后端返回的数据console.log(res.password) // 就是拿后端返回的数据{#$(#inp3).val(res);#}}})})
/scriptdef ab_ajax(request):# if request.is_ajax():if request.methodPOST:接收ajax提交过来的数据# QueryDict: {inp1: [1], inp2: [1]}print(request.POST)# d1 request.POST.get(inp1) # str# d2 request.POST.get(inp2) # str# d3 int(d1) int(d2)# 序列化import json# json.dumps(d3)user_dict {username:kevin, password:123}# return HttpResponse(json.dumps(d3))return HttpResponse(json.dumps(user_dict))# return JsonResponse(user_dict)return render(request, ab_ajax.html)