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. sql 容易被忽视的点

    1 dual select查询语句只有select就可以,但为了规范,凑结构,可以加个dual 例:select now() from dual; 这个概念是Oracle中的.在mysql中可写可不写 ...

  2. 帝国empirecms后台登陆次数限制修改

    打开文件:\e\config\config.php, 找到 'loginnum'=>5, 把5改为自己想要的数字即可

  3. MySQL数据库详解(三)MySQL的事务隔离剖析

    提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱. 转账过程具体到程序里会有一系列的操作,比如 ...

  4. python基础教程总结15——1.即时标记

    1. 测试文档: # test_input.txt Welcome to World Wide Spam. Inc. These are the corporate web pages of *Wor ...

  5. shell的切换

    从zsh切换到bash:在命令行输入bash即可 从bash切换到zsh:在命令行输入zsh即可

  6. 远程连接 mySql数据库

    远程连接 mySql数据库 一.安装并配置MySQL1.安装MySQL:运行mysql-essential-6.0.11-alpha-win32,按“MySQL+6.0+Windows下安装图解”完成 ...

  7. 2019.5.18-5.19 ACM-ICPC 全国邀请赛(西安)赛后总结

    第一次出去比赛经验太少了!!!果然最大目的是长见识和受刺激Orz 以下流水账: 背了本两千两百页的牛津高阶英汉双解词典,背了吃的,背了衣服……以后这些东西统统不带,买本口袋词典即可.上述物品这次比赛全 ...

  8. c++ 函数指针应用,定义一个方法,传入两个参数和一个函数指针,并返回结果

    #include <iostream> #include <string> using namespace std; double add(double x, double y ...

  9. Some tricks

    一 . \(2^i >\sum_{0}^{i - 1}2^i\) 二. 当概率非常小时,且答案允许范围内的误差.如与正确答案不超过\(2^{-6}\)即可. 选取一个较小的值,然后取min即可. ...

  10. HDU-1072-Nightmares

    这题可以用dfs写,我们记忆化搜索. 我们定义一个step和time数组,分别表示走到这点的最小步数,time表示走到该点炸弹还剩多少时间. 递归边界一是,如果走到该点,时间等于0,我们就返回. 如果 ...