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. 6 WPF控件

    WPF控件分类: 内容控件 标题内容控件 文本控件 列表控件 基于范围的控件 日期控件 控件类 控件是与用户交互的元素.控件可以获得焦点,能接受键盘或鼠标的输入. 所有控件的基类是System.Win ...

  2. 在visual studio code和visual studio中编写TypeScript文件自动生成JavaScript文件

    注:此处的自动生成都为保存ts文件时自动生成js文件 VS CODE 只需要在TypeScript的终端控制台中输入如下命令即可,并注意需要将其中的*换成对应的文件名,此处的*似乎不能作为通用匹配. ...

  3. bzoj 1690: [Usaco2007 Dec]奶牛的旅行【01分数规划+spfa】

    把add传参里的double写成int我也是石乐志-- 首先这个东西长得就很01分数规划 然后我不会证为什么没有8字环,我们假装他没有 那么设len为环长 \[ ans \leq \frac{\sum ...

  4. deepin 安装版本管理工具

    在Linux下我们可以使用RapidSVN.RapidSVN是一款轻量级的免费.开源 SVN 客户端,相比tortoise svn它更加小巧而且占系统资源少运行速度快. 一:安装RapidSVN版本控 ...

  5. 读懂mysql慢查询日志

    我们来看一下如何去读懂这些慢查询日志.在跟踪慢查询日志之前,首先你得保证最少发生过一次慢查询.如果你没有可以自己制造一个:root@server# mysql -e 'SELECT SLEEP(8); ...

  6. java 并发编程 Executor框架

    http://blog.csdn.net/chenchaofuck1/article/details/51606224 demo package executor; import java.util. ...

  7. Android 性能优化(14)网络优化( 10)Determining and Monitoring the Connectivity Status

    Determining and Monitoring the Connectivity Status This lesson teaches you to Determine if you Have ...

  8. 全面学习ORACLE Scheduler特性(9)创建Chains

    五.使用Chains 今天要来认识一位新同学:CHAIN(注意不要敲成CHINA).CHAIN可以被视做一组Programs的复合,举个简单的例子:运行PROGRAM:A以及PROGRAM:B,如果成 ...

  9. 236 Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先

    给定一棵二叉树, 找到该树中两个指定节点的最近公共祖先. 详见:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tre ...

  10. OpenSSL 1.0.0生成p12、jks、crt等格式证书的命令个过程

    OpenSSL 1.0.0生成p12.jks.crt等格式证书的命令个过程   此生成的证书可用于浏览器.java.tomcat.c++等.在此备忘!     1.创建根证私钥命令:openssl g ...