Djang学习笔记-1
1.django的生命周期: url匹配 -》 视图函数 -》 返回用户字符串 url匹配 -》 视图函数 -》 打开一个HTML文件,并读取内容2.创建Django project Django-admin start project XXX cd XXX python manage.py startapp xx
XXX 配置文件 url.py setting.py cmdb views,py admin.py models.py #创建数据库表3.配置 将appname添加到INSTALLED_APPS中 模板路径 静态文件路径STATICFILES=(os,path.join(BASAE_DIR,'static')) #注释CSRF
4.编写code url编写对应关系,views views.py中编写相应请求处理功能 form表单: 1form标签中action属性设置提交地址'/url',请求方式method有post以及get两种方式 2.表单中必须要有一个input标签的type属性设置为submit 3.为了能够在后台提交到数据,还应该将数据input标签中设置name属性,在后台通过request.POST.get('name',None)
5.Django项目中的urls.py的视图映射方式方式分为CBV和FBC,分别代表类-视图,以及函数-视图 值得注意的是,如果采用的是CBV时 (1)需要在APP中views.py文件中导入from django.views import View 同时,所有采用CBV的类都必须继承于View类,该类中有一个重要的函数叫做dispatch(),采用的是反射 动态获取处理函数,可以自定义重载发挥特定的功能;(2)在urls.py文件中,urlpatterns对应的url需要调用映射类当中的as_view()函数
6. a. url(r'detail-(\d+).html', views.detail), 实战:如果没有采用分组url时 def func(request,nid,uid): pass def func(request,*args): args为一个元组 b. url(r'detail-(?P<nid>\d+).html', views.detail), 实战: def func(request,nid,uid): pass def func(request,**kwargs): kwargs为一个字典 c. 默认值 url('index',views.index,{'name':'root'}); 但在处理函数def index中,需要接收默认值,def index(request,name):
d. 命名空间 在Django中,如果存在多个url对应同一个后台处理函数,我们应该在后台知道 当前消息来自于哪一个url,所以需要对这些url进行设置命名空间namespace属性 项目下的url: url('handle/',include("handle.urls",namespace='handle')), app下的url: url(r'^detail-(?P<nid>\d+).html', views.detail,name='detail'), detail处理函数中翻转生成一个url: reverse("handle:detail") 前端静态文件中跳转元素: {% url 'handle:detail' nid=1%}
urls.py文件中 通过模板语言: url有一个name参数:对url路由关系进行命名,以后可以根据此名称生成自己想要的url 例如:url(r'dasdasdasdfasfasdasd/(\d+)/',views.index,name='indexurl') 在前端代码中,所提交的form表单中action的地址就可以写成action='{% url 'indexurl' 3' %}' 从而实现表单提交的动态性,可以指定提交的地址;而如果希望提交数据后仍然停留在当前页面 就可以通过设置form表单的action的值为action="{{request.path_info}}" 通过view中的映射函数: url(r'^dasdasdasdas/(?P<uid>\d+)/(?P<nid>\d+)',views.index,name='indexx') from django.urls import reverse #通过反转拼接一个路径 v = reverse('indexx',kwargs={'uid':1,'nid':2}) print(v) # 'dasdasdasdas/1/2'
c. 值得一说的是当一个程序大了之后,可能将多个APP分给不同的团队做, 但所有的APP都会共用一个url,就可能导致url文件中不能出现重复的现象 针对这样一个问题,Django框架出现一个类似于路由分发的功能 具体实现如下: (1)在Django项目下的urls.py文件中 from django.conf.urls import include urlpatterns = ( url('appname/',include('appname.urls')), ) (2)在appname下创建一个urls.py文件
d.Django出现加载css失败的解决办法,见博客
e.使用路由分发之后,需要注意一下问题 (1)所有的form标签的action属性以及a标签的href路径,其形式必须为'/APPname/路由' 因为每次提交,都会首先在Django项目中的urls.py文件中,寻找对应APPname的APP, 完成一级匹配;之后从APP下的urls.py文件中进行路由匹配,完成二级匹配。 (2)以上第一种情况,存在一个特殊例外,那就是在相关app中的urls.py文件下,url有name属性 并且在HTML文件中的form表单的action属性(或者a.href)采用{% url 'app_url_name'%}的提交地址。这种情况是 Django在内部替你进行了url地址的拼接,便不需要采用第一种形式,(注意,这里的app_url_name是相关 APP下的urls.py文件中特定url的name的属性值,而并非一定是Django项目文件中urls.py中的url的name属性值)
7.数据库之ORM操作: 如果使用的是MySQL数据库, 则在Django项目下的settings.py文件中做如下配置: a. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'derrick', 'USER': 'root', 'PASSWORD':'root', 'HOST': '127.0.0.1', 'PORT': '3306', } }
将APPname添加到installed_app中
b. 安装mysqldb(python2.7) 本人在安装MySQLclient时出现错误:缺失vs C++编译工具 解决办法:pip install XXXXX.whl(该类型是已经编译好的python代码) 安装pymysql(python3.x) *********注意********** 在Django中默认使用MySQLdb连接MySQL,但是如何修改为使用pymysql呢? 方法:在Django项目的__init__.py文件中 import pymysql pymysql.install_as_MySQLdb()
c. 在APP的models.py文件中 建立表结构类,该类必须继承于models.Model父类 建立完成之后,打开terminal 执行python manage.py makemigrations(在migrations目录下创建一个零时py) python manage.py migrate(保存表结构到MySQL数据库)
d. Django ORM基本增删查改; models.User.objects.create(XCXXXXXXXX) filter() update() delete() 查出数据结果按照特定属性倒序排序order_by('-uid')
e. Django修改数据库的表结构,可以直接修改models.py文件中表结构类 再执行 python manage.py makemigrations(在migrations目录下创建一个零时py) python manage.py migrate(保存表结构到MySQL数据库)
f. Django字段类型介绍 null -> db是否可以为空 default ->默认值 primary_key ->主键 db_column ->列名 db_index ->索引 unique_for_data ->单一数据索引 unique_for_month ->单一数据部分month索引 unique_for_yaer auto_now ->创建时,自动生成时间 auto_now_add ->更新时,自动更新当前时间
在Django中,更新数据要采用以下方法:
#obj = UserInfo.object.filter(id=1).update(caption = 'ceo')
bj = UserInfo.object.filter(id=1).first() obj.caption = 'ceo' obj.save()
choice ->django admin中显示下拉框,避免连表查询 blank ->django admin是否可以为空 verbose_name ->django admin中列显示中文别名 editadble ->Django admin中是否可以被编辑 error_message ->django admin错误提示信息 help_text ->django admin帮助提示提示信息 validators ->Django form自定义正则表达式匹配错误信息
后续modelform验证......
g: 在Django中创建一个外键,例如在User表中写入以下语句: group = models.Foreign_key('UserGroup',to_field = 'uid') 其中to_field默认是使用关联表的主键 在执行python manage.py makemigrations以及python manage.py migrate之后 Django会在User表的内部自动生成创建一个group_id 若obj = User.objects.filter(id = 1).first() 此时obj.group代表的是一个UserGroup对象,封装了UserGroup表中的所有的属性 obj.group.uid
h.多对多 class User(models.Model): username = models.CharField(max_length=32) age = models.CharField(max_length=32) m = models.ManyToManyField('UserGroup') class UserGroup(models.Model): groupname = models.CharField(max_length=32)
obj = User.objects.get(id=1); obj.m.add(1) obj.m.add(1,2) obj.m.add(*[1,2,3,4]) obj.m.remove(1) obj.m.clear() obj.m.set([1,2,3,4]) obj.m.all()#为UserGroup对象 obj.m.filter(groupname='abc')
8. $.ajax({ url:'/index/', data:{'k':'v','list':[1,2,3,4],'k3':JOSN.Stringfy({'k4':'v4'}))} ,$(form对象).serilize() type:'POST', datatype:'JSON', traditional:true, success:function(d){ location:reload() #刷新 location.href='某个地址' #跳转 } })9. request.method request.POST request.GET request.getlist request.FILES.get //chunkx request.path_info
return render/Httpresponse/rediect
10. 模板渲染 render(request,"index,html") #for #if #索引: keys values items all
Djang学习笔记-1的更多相关文章
- Django初识 学习笔记一
Django初识 学习笔记一 mvcviewsmodelstemplate. 一 MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(c ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
随机推荐
- [翻译]NUnit---Equality Asserts&& Identity Asserts (四)
Equality Asserts 这些方法测试两个参数是否相等.语言不自动装修的普通类型可以使用对应的重载的方法. Comparing Numerics of Different Types 比较两个 ...
- linux中touch命令参数修改文件的时间戳(转载)
转自:http://os.51cto.com/art/200908/144237.htm linux中touch命令参数不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存 ...
- 07-11 Linux命令操作
1. 查看当做操作目录位置 > pwd 2. 查看(当前)目录里边的文件内容 > ls //list > ls -l 或ll ...
- HTML5来了,7个混合式移动开发框架
在这个时间开始学习移动开发真是最好不过了,每个人应该都有一些移动应用的创意,而且你并不需要任何的原生应用编程经验,你只需要一些HTML的相关知识,懂一些CSS和JavaScript就够了.如果你总听别 ...
- mycat登录报错Host 'XXX' is blocked because of many connection errors的另一种解决思路
报错时机 使用了mycat,而不是单纯使用了mysql. 报错信息 ERROR 1129 (HY000): Host '1.23.22.18' is blocked because of many c ...
- Nginx开启http2访问和gzip网页压缩功能
准备工作 如果Nginx要开启http2需要满足以下2个条件: nginx >=1.9.5 openSSL >= 1.0.2 所以这里我们首先要检查Nginx的版本如果没有安装要先安装 ...
- 自动构造词法分析器的步骤——正规式转换为最小化DFA
正规式-->最小化DFA 1.先把正则式-->NFA(非确定有穷自动机) 涉及一系列分解规则 2.再把NFA通过"子集构造法"-->DFA 通过子集构造法将NFA ...
- ACM_括号匹配
括号匹配(栈) Time Limit: 2000/1000ms (Java/Others) Problem Description: 给一组包含[]()两种括号的序列,检查是否是合法的. 如:()[] ...
- Windows Server 2008 R2关闭FTP服务
公司在ZJ的项目给了一台互联网可以访问的测试服务器,但是只给了三个访问端口,而且还做了映射. 映射信息如下:[1050->3389,1051->50000,1053->21] 其中1 ...
- 242 Valid Anagram 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词.例如,s = "anagram",t = "nagaram",返回 true ...