http://www.cnblogs.com/yuanchenqi/articles/6083427.html

Django:

1.安装Django

pip install  django

2.创建project

django-admin starproject myset

3.创建APP

python manage.py starapp app01

4.setting配置//jQuery

TEMPLATES

STAICFILES_DIR=(

os.path.join(BASE_DIR,"statics"),

)

STATIC_URL = '/static/'

url.py

view.py

5.使用模板

render(request,"index.html")

6.启动项目

python manage.py runnserver 127.0.0.1:8090

7.链接数据库

model.py

8.更新数据库

Python manage.py makemigrations

python manage.py migrate

9.创建admin用户

Python manage.py createsuperuser

10.清空数据库

python manage.py flush

11.启动交互界面

python manage.py  shell

12.详细命令列表

Python manage.py

MTV-templates:

1.url(r'^index',view.index,name='rename') 建立别名,提高耦合,前后端分离

eg:<from action="{% url 'rename'%}" method="post">

url(r'^index',view.StudentView.as_view(),name='student')#CBV

url(r'^article/(?P<year>\d{4})/(?P<month>\d{2})$', views.year_month_hasname)#有名分组

view:views.month_archive(request, year, month)

2.include url

eg:url(r'^myapp/',include('myapp.urls')),

3.http请求中的两个核心对象:

http请求:HttpRe

4.locals():可以直接将函数中的所有变量传递给模板

return render(request,"index.html",locals())

5.request.FILE的三个属性:

filename:上传的文件名

content_type:上传文件的Content-type

content: 上传文件的原始内容

6.request.POST.getlist("hobby")

7.request.path 只会拿到路径,不会拿到数据

8.request.full_path 拿到全路径,包括数据

9.反向生成URL:

django.core.urlresolvers.reverse()

year = 2016

url = reverse('rename',args=(year,))

有名分组

/index/(?P<nid>\d+)/     func    name=a3

{% url "a2" nid=11 %}

reverse('a3',kwargs={'nid':11})

10.{% for item in person_list reversed %} 反向循环

11.正则路由url(r'^(\w+)/(\w+)/$', views.display_table_objs,name="table_objs"),

view:def display_table_objs(request,app_name,table_name):

-models:

name = models.CharField(max_length=32,verbose_name='名称')

city = models.CharField(verbose_name='城市',max_length=32)

sex = models.BooleanField(max_length=1,choice=((0,'男'),(1,'女'),))

website = models.URLField()

email = models.EmailField()

birthday = models.DateField()

author = models.OneToOneField(Author)

authors = models.ManyToManyField(Author)

publisher = models.ForeignKey(Publisher)

nid = models.AutoField(primary_key=True) 自定义自增列,默认会自动创建一个名为ID的自增列

增:Book.objects.create(name = "ming")

一对增加的两种方式:

1. models.Book.objects.create(title="追风筝的人",publish_id=1) #publish_id=1

2.pub_obj = models.Publish.objects.filter(name="人民出版社")[0]

models.Book.objects.create(title = "简爱",publish=pub_obj) # publish=pub_obj

删:Book.objects.fileter(id=1).delete()

book = models.Book.objects.fileter(id=1)

book.Author.clear() 清空与book中id=1关联的所有数据

book.author.remove(2) 可以为id

book.author.remove(*[1,3,5]) 可以是列表

反向:

auther = models.Author.objects.filter(id=1)

auther.book_set.clear()

改:

models.Book.objects.filter(id=3).update(title='PHP') 效率高

多对多:

obj=Book.objects.filter(id=1)[0]

auther=Author.objects.filter(id_gt=2)

obj.auther.clear() #无返回值

obj.auther.add(*auther)

obj.auther.remove() #有返回值

查:

# 查询相关API:

#  <1>filter(**kwargs):      它包含了与所给筛选条件相匹配的对象

#  <2>all():                 查询所有结果

#  <3>get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

#-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------

#  <4>values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

#  <5>exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象

#  <6>order_by(*field):      对查询结果排序

#  <7>reverse():             对查询结果反向排序

#  <8>distinct():            从返回结果中剔除重复纪录

#  <9>values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

#  <10>count():              返回数据库中匹配查询(QuerySet)的对象数量。

# <11>first():               返回第一条记录

# <12>last():                返回最后一条记录

#  <13>exists():             如果QuerySet包含数据,就返回True,否则返回False。

# 14.values 和value_list     的区别,前者返回字典,后者返回元组

<QuerySet [{'nid': 2, 'course': 'python'}, {'nid': 24, 'course': 'python'}]> #values

< QuerySet[(2, 'python'), (24, 'python')] > #values_list

#15.update()                 只对queryset结果集有效,所以filter()有update方法,get()没有update的方法

#16.delete()                  删除

#datalist = models.Userinfo.objects.all().only("name","email")  #拿到的还是一个QuerySet集合,仅仅取name和email

#datalist = models.Userinfo.objects.all().defer("name","email") #阻止,不取name和email

了不起的双下划线:

.count()获取匹配的个数

id__lt=10,id__gt=1 #获取id大于1且小于10的

id__in=[11,22,33] #获取id等于11,22,33的数据

exclude(id__in=[11,22,33]) #获取id不等于11,22,33的数据

name__contains='ven' #获取name中包含ven的数据

name__icontains='ven' #获取name中不包含 ven的数据

id__range=[1,2] 范围 1-2 含左不含右

pub_data__isnull=True 是否可以为null

.order_by('id') asc从大到小排序

.order_by('-id') desc从小到大排序

正则匹配 regex,iregex不区分大小写

Entry.objects.get(title__regex=r'^(An?|The) +')

Entry.objects.fileter(pub_data__data=datetime.date(2018,1,1)) --->date

Entry.objects.fileter(pub_date__year=2005) -->year

聚合查询和分组查询:

Book.objects.all().aggregate(Avg('price'))----->{'price__avg':34.35}

Book.objects.aggregate(Avg('price'),Max('price'),Min('price'))

--->{'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}

分组:

Book.objects.filter(auther__name='alex').values('title') 查询alex出的书

Book.objects.fileter(auther__name='alex').aggregate(Sum('price')) alex出的书总价

F查询和Q查询:

from django.db.models import F

from django.db.models import Q  导入

F使用查询条件的值,对数值进行操作

eg: models.Tb1.objects.update(num=F('num')+1)

Q构建搜索条件:

q1=models.Book.objects.filter(Q(title__starswith='P')).all()

Q(title__starswith='P')|Q(title__starswith='J') 匹配P开头或者是J开头的title

Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面

JSONON:

JSON.parse(str) ---> Object{"age":23,"name":"yuan"}   # 用于从一个json字符串中解析出jason对象

var c={a:1,b:2}

JSON.stringify(c)  -->'{"a":1,"b":2}' #用于从一个json对象解析成json字符串

django 向js发送数据:

def login(request):

obj={'name':"alex111"}

return render(request,'index.html',{"objs":json.dumps(obj)})

#----------------------------------

<script>

var temp={{ objs|safe }}

alert(temp.name);

alert(temp['name'])

</script>

Ajax - javascript:

post 请求需要设置请求头:xmlHttp.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);

XMLHTTPRequest:

1.open(请求方式,URL,是否异步)默认异步

2.send(请求体)

3.onreadystatechange,指定监听函数,它会在xmlHttp对象的状态发生变化是调用

4.readyState, 当前xmlHttp对象的状态,其中4状态便是服务器响应结束

5.status ,服务器响应的状态码,200表示响应成功

6.responseText, 获取服务器的响应体

eg:

1.function createXMLHTTPRequest()

2.function brul(){

xmlHttp = createXMLHTTPRequest()

xmlHttp.onreadystatechange = function(){

if (xmlHttp.readyState ==4 && xmlHttp.status){

if (xmlHttp.responseText=="true"){

document.getElementById("hidden").innerText="你的用户已经存在"

}else{

document.getElementById("hidden").innerText=""

}

}

}

xmlHttp.open("GET","/myapp/Ajax_test/",ture,"json")

xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

var username = document.getElementById("hide").values

xmlHttp.sent("username="+username)

}

Ajax - jQuery:

1.$.get(url,[data],[callback],[type]) //q请求参数应该尽量放在data参数中,可以自动编码,避免手动拼接URL

2.$.post(url,[data],[callback],[type]) //type:text|html|json|script

$.post('myapp/student_manager/',{id:id},function(data){

if(data == 'true'){

document.getElementById("hidden").innerText="该用户名已经存在";

}else{

document.getElementById{"hidden"}.innerText="";

}

})

$.ajax(function{

})

-setting配置

LOGGING = {

'version': 1,

'disable_existing_loggers': False,

'handlers': {

'console':{

'level':'DEBUG',

'class':'logging.StreamHandler',

},

},

'loggers': {

'django.db.backends': {

'handlers': ['console'],

'propagate': True,

'level':'DEBUG',

},

}

}

信号:

model_signals:

pre_init                #model对象执行其构造方法前,自动触发

post_init               #model对象执行其构造方法之后,自动触发

pre_save                #model对象保存前,自动触发

post_save               #model对象保存后,自动触发

pre_delete              #model对象删除前,自动触发

post_delere             #model对象删除后,自动触发

m2m_changed             #model对象使用M2M字段操作数据库中的第三张表示,自动触发

managemeng_signals:

pre_migrate             #执行migrate命令前,自动触发

post_migrate            #执行migrate命令后,自动触发

request/response_signals:

request_startes         #请求到来前,自动触发

request_finished        #请求结束后,自动触发

got_request_exception   #请求异常时,自动触发

test_signals:

setting_changed         #配置文件改变时,自动触发

template_rendered       #模板执行渲染时,自动触发

Datebase_Wrapperd       #创建数据库连接时,自动触发

1.在项目的 __init__.py 文件中:

from django.db.models.signals import pre_save,post_save

def pre_save_func(sender,**kwargs):

print("pre_save_func")

print("pre_save_msg:",sender,kwargs)

def post_save_func(sender,**kwargs):

print("post_save_func")

print("post_save_msg:",sender,kwargs)

pre_save.connect(pre_save_func)             # models对象保存前触发callback函数

post_save.connect(post_save_func)           # models对象保存后触发函数

2.使用装饰器触发函数:将__init__.py 中的代码修改为

@receiver(request_finished)

def callback(sender, **kwargs):

print("Request finished!")

Django two的更多相关文章

  1. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  2. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  3. django server之间通过remote user 相互调用

    首先,场景是这样的:存在两个django web应用,并且两个应用存在一定的联系.某些情况下彼此需要获取对方的数据. 但是我们的应用肯经都会有对应的鉴权机制.不会让人家随随便便就访问的对吧.好比上车要 ...

  4. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  5. Mysql事务探索及其在Django中的实践(一)

    前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...

  6. 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...

  7. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  8. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  9. Django

    一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统) ...

  10. Django admin定制化,User字段扩展[原创]

    前言 参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用 ...

随机推荐

  1. dubbo工作原理(3)

    dubbo主要核心部件 Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. ...

  2. Spring 设计原则

    Spring 框架有四大原则(Spring所有的功能和设计和实现都基于四大原则): 1. 使用POJO进行轻量级和最小侵入式开发. 2. 通过依赖注入和基本接口编程实现松耦合. 3. 通过AOP和基于 ...

  3. 《超实用的Node.js代码段》连载二:正确拼接Buffer

    对于初学Node.js框架的开发人员来说,可能认为Buffer模块比较易学.重要性也不是那么突出.其实,Buffer模块在文件I/O和网络I/O中应用非常广泛,其处理二进制的性能比普通字符串性能要高出 ...

  4. 对flex-grow和flex-shrink的深入理解

    flex弹性布局,如果子元素宽度之和大于或者小于父元素宽度,空间就会存在剩余和不够,flex默认不换行,除非设置flex-wrap,那么这种情况下,有两个重要的属性,flex-grow和flex-sh ...

  5. Ubuntu 设置静态ip地址

    1. 找到文件并作如下修改: sudo vim /etc/network/interfaces 修改如下部分: auto eth0iface eth0 inet staticaddress 192.1 ...

  6. Viewcontroller基类

    #import <UIKit/UIKit.h> #import "YQZMutableArray.h" @interface YQZViewController : U ...

  7. 链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "Cannot start more transactions on this session."

    开发同事反馈一个SQL Server存储过程执行的时候,报"链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 ...

  8. ApexSQL Log中的Redo Script跟原始SQL不一致问题

    最近遇到一个误更新数据的问题,使用ApexSQL Log做挖掘事务日志的时候,发现ApexSQL Log生成的Redo Script跟原始SQL是有区别的.它们并不是完全一致的.只是逻辑上等价而已.如 ...

  9. 实现strcpy函数

    不使用库函数,实现strcpy函数: char *my_strcpy(char *t,char *s){ char *strDest=t; if(t==NULL && s==NULL) ...

  10. 一把剪刀看懂git reset 和它的三个参数

    都说git 命令难记且难懂,但是如果从立体的角度看待git与git管理的版本,那么一切都会明朗许多. 大多数的学习教程为了理解git,会绘制几个圆圈的串联,每个圆圈代表一个commit的版本,也就是从 ...