Django 基本原理和解释 M V T

Django 是基于Python 的 web框架,类似于 MVC (Model + View + Controller),MTV 把前后端进行了分离。

M 是Model, 在Django中, Model可以用来初始化对象,并使用MysqlClient 更加简洁的操作数据库。

可以用save() 来存储 , delete()来删除。不用知道原生SQL语句就可以操作。

V 是views,用来写逻辑,app中的urls负责接收访问地址,然后访问地址对通过views找到对应的response函数。

T是template, 基本上就是Html 文件。vewis 里的 HttpResponse、Render。Redirect都可以直接找到对应的html页面并进行渲染。



Model

可以根据以下方法创建类, 每一个属性就会在数据库里作为key存储。

每次创建新的类以后必须要让mange.py makemigrations 然后 migrate。不然不生效。

 当需要获取值的时候可以直接实例化类,然后对对象使用方法。

比如: client=carton_cloud_client.objects.all() # 这个是把数据库里所有数据作为对象,返回给client

 然后: data=client.values() # 通过values方法,对象就被转化为Django里的 Queryset数据格式。

如果在实例化时,需要查找具体哪个对象,可以在objects后边用get() 或者filter()方法查找满足条件的对象。

person= Person.object.filter(p_age__gt=50).filter(p_age__lt=70)

all()可以切片users=User.objects.all()[2:5]下边不可以负数 也有last 和first()方法

filter()

exclude()

order by()

values() 转换为类字典显示列表

get()这个容易出异常要小心。 get().last()   get.first()直接调出最后或者第一个对象。

使用values导出JSON文档

 person= Person.objects.all()

 person_values=person.values()

 print(person_values)


Quick start

创建app

先要开启虚拟环境,shell中输入:

django-admin startproject nameformyproejct

这个时候框架nameformyproejct这个项目就有了,然后拿pycharm打开下一级文件夹(文件夹需要被识别为包文件,pycharm中显示文件夹图标是有个小点的)

python manage.py startapp nameformyapp   这个时候就创建了一个新的app(这个文件夹可以用来处理一类mvc的模板)

然后把setting.py里的设置过一下就好了。

python mange.py runserver 0.0.0.0:8000 就可以启动Django内置的服务器(后边ip和端口可以不写)

浏览器 127.0.0.1:8000就可以看到了 



Template

views里边 url(r‘^index/’,include('app.urls',namespace='xxxx')),

template中可以用 {% url  ‘app_name : url_name’   param %} ****

app_name:应用命名空间的名称

url_name:链接名

param:地址的参数

模板语法 点方法

a 可以调用字典中的key  =》不用加引号

b 可以调用列表里的索引

c 调用对象的属性和方法

forloop。counter用法

<ul>{% for i in client%}    

<li>    {{forloop.counter}}  {{i.c_name}}           </li>    

{% empty %}    

<h3> EMPTY LAAAAAA</h3>  

 {% endfor %}

使用empty如果为空的时候显示下边的内容也可以是<img>  

{{ code|safe}} # views过来的data/context的code可以被渲染为html

{{widthratio 5 1}}  乘除 这里的除是用乘法做的

{% block content %} {% endblock%} 继承

{{block.Super}}不想覆盖 可以继承之前 增量操作

Path如果用 $ 代表必须以dollar符号前的字符结尾

路由中的参数由()获取student/(\d) 然后request后要加变量输入变量

Context=locals()内置函数将局部变量将字典形式打包key是变量名

《li》 《a href=‘/two/student/{{ grade。Id}}’》 {{grade。Name }} 《a》 《li》

{% url 'second:learn'%}  second就是namespace /learn 是name  冒号连接  namespace:name

template =》如果需要传值{% url ‘namespace:name ’year= 2020 month=12 day=30 %}

urls =>   url(r'^update/(?P<year>\d+)/(?P<month>\d)/(?P<day>\d)/',views.update)

views=> 里边就可以用 HttpRespnse(year,month,day)

cookie客户端 存储 键值对 支持过期时间    Session依赖 cookie 、 cookie依赖 浏览器

Request。Session。Flush()要做flush 不然垃圾数据一致会增多

response。set_ _cookie(key, value)

max_age=过期时间 second为单位

set_ _signed_ _cookie

salt=xxx

加密解密都要salt

salt加密


View

request.path                 request.method                request.GET                 request.META   request.POST

request.GET.get('key')    request.GET.getlist('key') 

响应

HttpResponse

重定向

HttpResponseRedirect(reverse('namespace:name'))

HttpResponseRedirect(reverse(“namespace:name”,args=(value1,value2.。。。。)))

HttpResponseRedirect(reverse(“namespace:name”,kwargs={key1:value1,key2:value2}))

JSON响应

JsonResponse

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容