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!")

最新文章

  1. 如何在latex 中插入EPS格式图片
  2. vtkTransform实例 1
  3. linux的计划
  4. [转]jquery 点击表格变为input可以修改无刷新更新数据
  5. NodeJS 框架 Express 从 3.0升级至4.0的新特性
  6. Spring 实例化bean的方式
  7. ios开发-第二天
  8. jQuery – AJAX load() 方法
  9. Django项目导入Eclipse运行调试
  10. C#Workbooks 对象的 Open 方法参数说明
  11. There are no enabled repos.
  12. centos6.8下l2tp客户端xl2tpd的安装配置
  13. 模式匹配之Boyer-Moore算法
  14. Centos 7 环境下,如何使用 Apache 实现 SSL 虚拟主机 双向认证 的详细教程:
  15. Codeforces Testing Round 14
  16. 征服 Ajax 应用程序的安全威胁
  17. 最近闲着利用QQ协议写了一个聊天器
  18. [luogu3385]dfs_spfa判负环模板
  19. Azure SQL的DTU和eDTU到底是个什么鬼
  20. SQL递归查询实现组织机构树

热门文章

  1. NIO基础之Buffer
  2. UI事件与内容,舞台与演员
  3. Linux Shell流程例子
  4. jmeter的安装和基本使用
  5. Tarjan的学习笔记 求割边求割点
  6. JavaScript内存泄露,闭包内存泄露如何解决
  7. mysql如何让自增id从1开始设置方法
  8. javaweb基础(18)_jsp属性范围
  9. mysql中影响数据库性能的因素讲解
  10. 使用apache benchmark(ab) 测试报错: apr_socket_recv: Connection timed out (110)