1、Django请求的生命周期

      路由系统 -> 试图函数(获取模板+数据=》渲染) -> 字符串返回给用户

2、路由系统

      /index/                ->  函数或类.as_view()
/detail/(\d+) -> 函数(参数) 或 类.as_view()(参数)
/detail/(?P<nid>\d+) -> 函数(参数) 或 类.as_view()(参数)
/detail/ -> include("app01.urls")
/detail/ name='a1' -> include("app01.urls")
- 视图中:reverse
- 模板中:{% url "a1" %} 3、视图 FBV:函数
def index(request,*args,**kwargs):
.. CBV:类
class Home(views.View): def get(self,reqeust,*args,**kwargs):
.. 获取用户请求中的数据:
request.POST.get
request.GET.get
reqeust.FILES.get() # checkbox,
........getlist() request.path_info 文件对象 = reqeust.FILES.get()
文件对象.name
文件对象.size
文件对象.chunks() # <form 特殊的设置></form> 给用户返回数据:
render(request, "模板的文件的路径", {'k1': [1,2,3,4],"k2": {'name': 'xxx','age': 73}})
redirect("URL")
HttpResponse(字符串) 4、模板语言
render(request, "模板的文件的路径", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': 'ssss','age': 73}})
 <html>

   <body>
<h1> {{ obj }} </h1>
<h1> {{ k1.3 }} </h1>
<h1> {{ k2.name }} </h1>
{% for i in k1 %}
<p> {{ i }} </p>
{% endfor %} {% for row in k2.keys %} #keys 通过字典键 取值
{{ row }}
{{forloop.counter}}#从1开始计数
{{forloop.counter0}}#从0开始计数
{{forloop.revcounter }}#从1开始计数倒降序
{{forloop.revcounter0 }}#从0开始计数倒降序
{{forloop.first}}#是否第一个循环
{{forloop.last}}#是否最后一个循环
{{forloop.parentloop}}#父级的循环计数
{% endfor %} {% for row in k2.values %} #直接取 字典值
{{ row }}
{% endfor %} {% for k,v in k2.items %} #取键和值的元组模式
{{ k }} - {{v}}
{% endfor %} </body>
</html>

5、ORM

   a. 创建类和字段
      class User(models.Model):
age = models.IntergerFiled()#整数不用加长度
name = models.CharField(max_length=10)#字符长度 Python manage.py makemigrations
python manage.py migrate # settings.py 注册APP

   b. 操作

      增
         models.User.objects.create(name='qianxiaohu',age=18)#方法一

         dic = {'name': 'xx', 'age': 19}#方法二
models.User.objects.create(**dic) obj = models.User(name='qianxiaohu',age=18)#方法三
obj.save()
 models.User.objects.filter(id=1).delete()
models.User.objects.filter(id__gt=1).update(name='alex',age=84)
dic = {'name': 'xx', 'age': 19}
models.User.objects.filter(id__gt=1).update(**dic)
      models.User.objects.filter(id=1,name='root')
models.User.objects.filter(id__gt=1,name='root')#大于
models.User.objects.filter(id__lt=1)#小于
models.User.objects.filter(id__gte=1)#大于等于
models.User.objects.filter(id__lte=1)#小于等于 models.User.objects.filter(id=1,name='root')#条件 直接写入 dic = {'name': 'xx', 'age__gt': 19}#通过定义字典
models.User.objects.filter(**dic) v1 = models.Business.objects.all()
# QuerySet ,内部元素都是对象 # QuerySet ,内部元素都是字典
v2 = models.Business.objects.all().values('id','caption')
# QuerySet ,内部元素都是元组
v3 = models.Business.objects.all().values_list('id','caption') # 获取到的一个对象,如果不存在就报错
models.Business.objects.get(id=1)
对象或者None = models.Business.objects.filter(id=1).first()

         外键:
v = models.Host.objects.filter(nid__gt=0)
v[0].b.caption ----> 通过.进行跨表 filter(b__caption)# 条件查询跨表时用 __ 双下划线 外键:
示例:
     class UserType(models.Model):
  caption = models.CharField(max_length=32) id caption
# 1,普通用户
# 2,VIP用户
# 3, 游客 class User(models.Model):
age = models.IntergerFiled()
name = models.CharField(max_length=10)#字符长度
# user_type_id = models.IntergerFiled() # 约束,
user_type = models.ForeignKey("UserType",to_field='id') # 约束,外键 name age user_type_id
# 用户1 18 3 #表示用户1 为游客
# 用户2 18 2 #表示用户2 为VIP用户
# 用户3 18 2
        窗口相对定位  开启相对定位  使用父级相对定位 单用 开始显示绝对定位
position: fixed relative absolute Ajax $.ajax({
url: '/host',
type: "POST",
data: {'k1': 123,'k2': "root"},
success: function(data){
// data是服务器端返回的字符串
var obj = JSON.parse(data);
}
})
$.get(url='xx',data='xxx')
$.getJson
$.post 建议:永远让服务器端返回一个字典 return HttpResponse(json.dumps(字典)) 多对多:
创建多对多:
方式一:自定义关系表
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)
port = models.IntegerField()
b = models.ForeignKey(to="Business", to_field='id')
#
class Application(models.Model):
name = models.CharField(max_length=32)
# class HostToApp(models.Model):
hobj = models.ForeignKey(to='Host',to_field='nid')
aobj = models.ForeignKey(to='Application',to_field='id') 操作关联表与其他相同
# HostToApp.objects.create(hobj_id=1,aobj_id=2) 方式二:自动创建关系表
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)
port = models.IntegerField()
b = models.ForeignKey(to="Business", to_field='id')
#
class Application(models.Model):
name = models.CharField(max_length=32)
r = models.ManyToManyField("Host")#自动关联,创建 与 无法直接对第三张表进行操作 obj = Application.objects.get(id=1)#取到一个记录对象
obj.name # 第三张表操作
obj.r.add(1)#这个记录对应的关系
obj.r.add(2)
obj.r.add(2,3,4)
obj.r.add(*[1,2,3,4]) obj.r.remove(1)
obj.r.remove(2,4)
obj.r.remove(*[1,2,3]) obj.r.clear()#清楚当前对象所有对应关系 obj.r.set([3,5,7])#修改当前对象的对应关系 # 所有相关的主机对象“列表” QuerySet
obj.r.all() #获取当前对象 的所有对应关系

 

python第一百零七天-- Django 基础 2的更多相关文章

  1. python第一百零五天 ---Django 基础 路由系统 URL 模板语言 ORM 操作

    一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+). ...

  2. “全栈2019”Java第一百零七章:匿名内部类与构造方法注意事项

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. python第一百零九天---Django 4

    session :1. Session 基于Cookie做用户验证时:敏感信息不适合放在cookie中 a. Session原理 Cookie是保存在用户浏览器端的键值对 Session是保存在服务器 ...

  4. 第一百零七节,JavaScript基本包装类型,数据类型的方法

    JavaScript基本包装类型,数据类型的方法 学习要点: 1.基本包装类型概述 2.Boolean类型 3.Number类型 4.String类型 为了便于操作基本类型值,ECMAScript提供 ...

  5. python第一百零二天-----第十七周作业

    由于内容众多 直接使用 git 链接 : https://github.com/uge3/hosts_masg 主机管理WEB页面 使用 SQLALchemy 主机管理(8列) ip 用户表: 用户名 ...

  6. hiho一下 第一百零七周 Give My Text Back(微软笔试题)

    题目1 : Give My Text Back 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 To prepare for the English exam Littl ...

  7. 【leetcode 简单】 第一百零七题 回旋镖的数量

    给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回旋镖的数量.你可以假设 n ...

  8. 第一百零七篇:基本数据类型(undefined,null,boolean类型)

    好家伙, 本篇内容为<JS高级程序设计>第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Numb ...

  9. “全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. Spring Boot 系列(七)Swagger2-生成RESTful接口文档

    Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服 ...

  2. TCP中往返时间的估计与超时

    往返时间的估计与超时   TCP采用超时/重传机制来处理报文段的丢失问题.尽管这在概念上面很简单,但是在实际中还是会产生很多微妙的问题.最明显还是超时时间间隔的设置.很显然,这个时间间隔肯定会大于RT ...

  3. GNU C 与 ANSI C(下)

    1. 语句表达式 GNU C 把包含在括号中的复合语句看做是一个表达式,称作语句表达式,它可以出现在任何允许表达式的地方.我们可以在语句表达式中使用原本只能在复合语句中使用的循环.局部变量等,例如: ...

  4. htmlUnit加持,网络小蜘蛛的超级进化

    前言 前段时间写了个小说线上采集阅读(猛戳这里:https://www.cnblogs.com/huanzi-qch/p/9817831.html),当我们去采集起点网的小说目录时发现目录数据没有在h ...

  5. Linux命令-基本变量类型及其运算

    [root@Redis01 ~]# cd /install/[root@Redis01 install]# mkdir -p test && cd test -s修改时间:[root@ ...

  6. MVC 视图助手书写规范及注意点

    @Html.TextBoxFor() 讲解(其他类似的 @Html.LabelFor 等)同理 @Html.TextBoxFor(model => model.SearchParams.Name ...

  7. [android] 服务的生命周期(混合方式)

    绑定服务:可以调用服务里面的方法, 如果调用者activity销毁了,服务也会跟着销毁 单独解除绑定的时候,服务也会被销毁 开启服务:不可以调用服务里面的方法 如果调用者activity退出了,服务还 ...

  8. Android Material Design控件使用(二)——FloatButton TextInputEditText TextInputLayout 按钮和输入框

    FloatingActionButton 1. 使用FloatingActionButton的情形 FAB代表一个App或一个页面中最主要的操作,如果一个App的每个页面都有FAB,则通常表示该App ...

  9. mysql无法远程连接

    在mysql的mysql数据库下: select user,host from user;(查看,没有本机的访问权限) grant all privileges on *.* to root@&quo ...

  10. 19 个常用的 JavaScript 简写方法

    来自:SangSir 链接:https://segmentfault.com/a/1190000012673854 原文:https://www.sitepoint.com/shorthand-jav ...