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. [转]使用 HTML5 WebSocket 构建实时 Web 应用

    HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例 ...

  2. Eclipse 主题(Theme)配置

    < 程序员大牛必备的装逼神器 > 一个牛逼的程序员,除了有牛逼的技术,还要有高逼格的风格,说白了,就和人一样,单是内在美还不行,必须外表也要美,就好比,一个乞丐,他内在美,但是全身臭气熏天 ...

  3. 基本类型包装类、System类、Math类、Arrays类、大数据运算

    1 基本类型包装类 Java中想对8种基本数据类型进行复杂操作很困难. 实际程序界面上用户输入的数据都是以字符串类型进行存储的. 程序开发中,需要把字符串转换成指定的基本数据类型. 1.1基本数据类型 ...

  4. dubbo rest返回值异常Incompatible types: declared root type

    2018-08-28 17:26:02,208 [http-bio-9090-exec-1][][][][][] ERROR com.wjs.member.plugin.intercepter.Ser ...

  5. userBean的删除

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  6. asp页面无法访问,可尝试开始SQL Server等服务

    存在问题 asp页面的英文提示,翻译后为: "一个错误发生在服务器在处理URL.请联系系统管理员(管理人).如果您是系统管理员,请点击这里了解更多关于这个错误."   解决方案 请 ...

  7. UVA 1153 Keep the Customer Satisfied 顾客是上帝(贪心)

    因为每增加一个订单,时间是会增加的,所以先按截止时间d排序, 这样的话无论是删除一个订单,或者增加订单,都不会影响已经选好的订单. 然后维护一个已经选好的订单的大根堆(优先队列),如果当前无法选择的话 ...

  8. Beta冲刺(周五)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作业要求在哪里 https://edu.cnblo ...

  9. 2018.5.9 Oracle数据库查询命令

    0.查询所有数据(最简单,但是时间很久) select * from emp; Result: EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- - ...

  10. Hbase 完全分布式 高可用 集群搭建

    1.准备 Hadoop 版本:2.7.7 ZooKeeper 版本:3.4.14 Hbase 版本:2.0.5 四台主机: s0, s1, s2, s3 搭建目标如下: HMaster:s0,s1(备 ...