Django two
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的更多相关文章
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- django server之间通过remote user 相互调用
首先,场景是这样的:存在两个django web应用,并且两个应用存在一定的联系.某些情况下彼此需要获取对方的数据. 但是我们的应用肯经都会有对应的鉴权机制.不会让人家随随便便就访问的对吧.好比上车要 ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Mysql事务探索及其在Django中的实践(一)
前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...
- 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...
- Django
一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统) ...
- Django admin定制化,User字段扩展[原创]
前言 参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用 ...
随机推荐
- Java基础语法(数组)
第4天 Java基础语法 今日内容介绍 u 流程控制语句(switch) u 数组 第1章 流程控制语句 1.1 选择结构switch switch 条件语句也是一种很常用的选择语句,它和if条件语句 ...
- 洛谷P3959 宝藏(模拟退火乱搞)
题意 题目链接 题面好长啊...自己看吧.. Sol 自己想了一个退火的思路,没想到第一次交85,多退了几次就A了哈哈哈 首先把没用的边去掉,然后剩下的边从小到大排序 这样我们就得到了一个选边的序列, ...
- Android Studio maven-metadata.xml 卡着不动原因和解决方法
头一天好好的,第二天就卡着了. 一直在这个地方不动,如果停止就会报 Error:Could not run build action using Gradle distribution ‘https: ...
- macOS Sierra 最新系统找回允许任何软件安装
终端输入就可以了 安装macOS Sierra后,会发现系统偏好设置的“安全与隐私”中默认已经去除了允许“任何来源”App的选项,无法运行一些第三方应用. 如果需要恢复允许“任何来源”的选项,即关闭G ...
- PLSQL Developer 12 保存登录的用户名和密码
1. 登录 PLSQL Developer PLSQL Developer > Preferences 2. Preferences > Logon History > Defini ...
- 使用脚本在Linux服务器上自动安装Kubernetes的包管理器Helm
Helm之于Kubernetes好比yum之于Red Hat Enterprise Linux,或者apt-get之于Ubuntu. Helm是由helm CLI和Tiller组成,是典型的Clien ...
- duboo 配置文件
官方文档 http://dubbo.apache.org/en-us/docs/user/quick-start.html 自己的 <?xml version="1.0" e ...
- Cenos7—安装
1. 进入安装界面 2. 选择语言 3. 进行分区 4. 设置root密码
- Ubuntu下命令行访问网站
第一步,需要安装一个名为w3m的软件工具,打开终端,输入如下命令 sudo apt-get install w3m 第二步,安装好w3m之后,在终端里面启动w3m,打开一个网址,比如w3m www ...
- SQL Server 游标的应用
----------------SQL游标应用----------------- 今天由于业务需求,需要在存储过程中实现有一个表的主键去匹配在另一个表中作为外键所对应的数值 ,若在C#中则非常简单只需 ...