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的更多相关文章

  1. Django初识 学习笔记一

    Django初识 学习笔记一 mvcviewsmodelstemplate. 一 MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(c ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  4. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  5. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  6. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  7. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  8. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  9. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

随机推荐

  1. BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划

    BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划 Description JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人 ...

  2. luogu3941入阵曲

    https://www.zybuluo.com/ysner/note/1301562 题面 统计在给出的\(n*m\)矩阵中,有多少个不同的子矩形中的数字之和是\(k\)的倍数? 解析 切不掉这道题是 ...

  3. bzoj1085 [SCOI2005]骑士精神——IDA*

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 搜索,IDA*,估价就是最少需要跳的步数: 代码意外地挺好写的,memcmp 用起来好 ...

  4. bzoj4237 稻草人——分治

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4237 分治: 先把所有点按 y 排序,然后二分递归: 对于每个 mid ,计算经过它的矩形的 ...

  5. IntelliJ IDEA 缓存和索引介绍

    转自:https://www.cnblogs.com/zhanghaibinblogs/p/6722061.html IDEA 在首次加载项目的时候都会创建索引,IDEA 的缓存和索引主要是用来加快文 ...

  6. 10.11NOIP模拟题(3)

    /* 可以看出,对于一段区间[L,R]如果统计了答案 若a[L]<a[R],那么当右端点往左移时答案不会更优,a[R]>a[L]同理 所以两个指针分别从头尾往中间扫那边小移哪边即可. */ ...

  7. typescript进阶篇之高级类型与条件类型(Readonly, Partial, Pick, Record)

    本文所有东西尽可在 typescript 官网文档寻找,但是深浅不一 高级类型 lib 库中的五个高级类型 以下所有例子皆以 person 为例 interface Person { name: st ...

  8. 洛谷P4887 第十四分块(前体)(二次离线莫队)

    题面 传送门 题解 lxl大毒瘤 我们考虑莫队,在移动端点的时候相当于我们需要快速计算一个区间内和当前数字异或和中\(1\)的个数为\(k\)的数有几个,而这个显然是可以差分的,也就是\([l,r]\ ...

  9. 数据结构之动态顺序表(C实现)

    线性表有2种,分为顺序表和链表. 顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定) 链表: 有3种,单链表.双向链表.循环链表(长度不固定) seqList.h ...

  10. Math teacher's homework

    Title:[Math teacher's homework] Description 题目大意:给你n个数m1,m2...mn,求满足X1 xor X2 xor ... xor Xn=k,0< ...