一、Django
    
    pip3 install django
    
    
    C:\Python35\Scripts
    
    # 创建Django工程
    django-admin startproject 【工程名称】
    
        mysite
            - mysite        # 对整个程序进行配置
                - init
                - settings  # 配置文件
                - url       # URL对应关系
                - wsgi      # 遵循WSIG规范,uwsgi + nginx
            - manage.py     # 管理Django程序:
                                - python manage.py
                                - python manage.py startapp xx
                                - python manage.py makemigrations
                                - python manage.py migrate
        
        
        
    # 运行Django功能
    python manage.py runserver 127.0.0.1:8001
    
    
    chouti
        - chouti
            - 配置
        - 主站 app
        - 后台管理 app
    
    
    
    # 创建app
    python manage.py startapp cmdb
    python manage.py startapp openstack
    python manage.py startapp xxoo....
    
    
    app:
        migrations     数据修改表结构
        admin          Django为我们提供的后台管理
        apps           配置当前app
        models         ORM,写指定的类  通过命令可以创建数据库结构
        tests          单元测试
        views          业务代码
    
    
    
    1、配置模板的路径
    
        TEMPLATES = [
                {
                    'BACKEND': 'django.template.backends.django.DjangoTemplates',
                    'DIRS': [os.path.join(BASE_DIR, 'templates')],
                    'APP_DIRS': True,
                    'OPTIONS': {
                        'context_processors': [
                            'django.template.context_processors.debug',
                            'django.template.context_processors.request',
                            'django.contrib.auth.context_processors.auth',
                            'django.contrib.messages.context_processors.messages',
                        ],
                    },
                },
            ]
    2、配置静态目录
        static
    
        STATICFILES_DIRS = (
            os.path.join(BASE_DIR, 'static'),
        )

<link rel="stylesheet" href="/static/commons.css" />

内容整理
    1. 创建Django工程
            django-admin startproject 工程名

2. 创建APP
        cd 工程名
        python manage.py startapp cmdb

3、静态文件
        project.settings.py
        
        STATICFILES_DIRS = (
            os.path.join(BASE_DIR, "static"),
        )
    
    4、模板路径
    
        DIRS ==>    [os.path.join(BASE_DIR,'templates'),]
        
    5、settings中
        
        middlerware
        
            # 注释 csrf
            
            
    6、定义路由规则
        url.py
        
            "login" --> 函数名
            
    7、定义视图函数
        app下views.py
            
            def func(request):
                # request.method   GET / POST
                
                # http://127.0.0.1:8009/home?nid=123&name=alex
                # request.GET.get('',None)   # 获取请求发来的而数据
                
                # request.POST.get('',None)
                
                
                # return HttpResponse("字符串")
                # return render(request, "HTML模板的路径")
                # return redirect('/只能填URL')
                
    8、模板渲染
        特殊的模板语言
        
            -- {{ 变量名 }}
        
                def func(request):
                    return render(request, "index.html", {'current_user': "alex"})
        
                    
                index.html
                
                <html>
                ..
                    <body>
                        <div>{{current_user}}</div>
                    </body>
                
                </html>
                
                ====> 最后生成的字符串
                
                <html>
                ..
                    <body>
                        <div>alex</div>
                    </body>
                
                </html>
            -- For循环
                def func(request):
                    return render(request, "index.html", {'current_user': "alex", 'user_list': ['alex','eric']})
        
                    
                index.html
                
                <html>
                ..
                    <body>
                        <div>{{current_user}}</div>
                        
                        <ul>
                            {% for row in user_list %}
                            
                                {% if row == "alex" %}
                                    <li>{{ row }}</li>
                                {% endif %}
                                
                            {% endfor %}
                        </ul>
                        
                    </body>
                
                </html>
                
            #####索引#################
                def func(request):
                    return render(request, "index.html", {
                                'current_user': "alex",
                                'user_list': ['alex','eric'],
                                'user_dict': {'k1': 'v1', 'k2': 'v2'}})
        
                    
                index.html
                
                <html>
                ..
                    <body>
                        <div>{{current_user}}</div>
                        
                        <a> {{ user_list.1 }} </a>
                        <a> {{ user_dict.k1 }} </a>
                        <a> {{ user_dict.k2 }} </a>
                        
                    </body>
                
                </html>
            
            ###### 条件
            
                def func(request):
                    return render(request, "index.html", {
                                'current_user': "alex",
                                "age": 18,
                                'user_list': ['alex','eric'],
                                'user_dict': {'k1': 'v1', 'k2': 'v2'}})
        
                    
                index.html
                
                <html>
                ..
                    <body>
                        <div>{{current_user}}</div>
                        
                        <a> {{ user_list.1 }} </a>
                        <a> {{ user_dict.k1 }} </a>
                        <a> {{ user_dict.k2 }} </a>
                        
                        {% if age %}
                            <a>有年龄</a>
                            {% if age > 16 %}
                                <a>老男人</a>
                            {% else %}
                                <a>小鲜肉</a>
                            {% endif %}
                        {% else %}
                            <a>无年龄</a>
                        {% endif %}
                    </body>
                
                </html>

二、路由系统,URL
    1、url(r'^index/', views.index),    
       url(r'^home/', views.Home.as_view()),
    2、url(r'^detail-(\d+).html', views.detail),  
    3、url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
       
       PS:
            def detail(request, *args,**kwargs):
                pass
    
       实战:
            a.
                url(r'^detail-(\d+)-(\d+).html', views.detail),
                
                def func(request, nid, uid):
                    
                    pass
            
                def func(request, *args):
                    args = (2,9)
                    
                    
                def func(request, *args, **kwargs):
                    args = (2,9)
       
            b.
                url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
                
                def func(request, nid, uid):
                    pass
                    
                def funct(request, **kwargs):
                    kwargs = {'nid': 1, 'uid': 3}
                    
                def func(request, *args, **kwargs):
                    args = (2,9)
    4、 name
        
        对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****
        
        url(r'^asdfasdfasdf/', views.index, name='i1'),
        url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
        url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
        
        
        
        def func(request, *args, **kwargs):
            from django.urls import reverse
            
            url1 = reverse('i1')                              # asdfasdfasdf/
            url2 = reverse('i2', args=(1,2,))                 # yug/1/2/
            url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
        
        
        xxx.html
            
            {% url "i1" %}               # asdfasdfasdf/
            {% url "i2" 1 2 %}           # yug/1/2/
            {% url "i3" pid=1 nid=9 %}   # buy/1/9/
        
        注:
            # 当前的URL
            request.path_info
    5、多级路由
        
        project/urls.py
            from django.conf.urls import url,include
            from django.contrib import admin

urlpatterns = [
                url(r'^cmdb/', include("app01.urls")),
                url(r'^monitor/', include("app02.urls")),
            ]
            
        app01/urls.py
            from django.conf.urls import url,include
            from django.contrib import admin
            from app01 import views

urlpatterns = [
                url(r'^login/', views.login),
            ]
            
        app02/urls.py
            from django.conf.urls import url,include
            from django.contrib import admin
            from app02 import views

urlpatterns = [
                url(r'^login/', views.login),
            ]
    
    6、默认值(欠)
    
    7、命名空间(欠)
    
    
二、视图
    1、获取用户请求数据
        request.GET
        request.POST
        request.FILES
        PS:
            GET:获取数据                
            POST:提交数据
            
    2、checkbox等多选的内容
        request.POST.getlist()
    3、上传文件
        # 上传文件,form标签做特殊设置
        obj = request.FILES.get('fafafa')
        obj.name
        f = open(obj.name, mode='wb')
        for item in obj.chunks():
            f.write(item)
        f.close()
    
    4、FBV & CBV
       function base view
       
        url.py
            index -> 函数名
            
        view.py
            def 函数(request):
                ...
        ====》
        /index/ -> 函数名
            
        /index/ -> 类
        
        ====》
        
        建议:两者都用
        
    5、装饰器
        欠

三、模板

四、ORM操作
    select * from tb where id > 1
    # 对应关系
    models.tb.objects.filter(id__gt=1)
    models.tb.objects.filter(id=1)
    models.tb.objects.filter(id__lt=1)
    
    创建类
    
    a. 先写类
        from django.db import models

# app01_userinfo
        class UserInfo(models.Model):
            # id列,自增,主键
            # 用户名列,字符串类型,指定长度
            username = models.CharField(max_length=32)
            password = models.CharField(max_length=64)
        
    b. 注册APP

INSTALLED_APPS = [
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'app01',
        ]
    c. 执行命令
        python manage.py  makemigrations
        python manage.py  migrate
        
    d. ********** 注意 ***********
        Django默认使用MySQLdb模块链接MySQL
        主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
            import pymysql
            pymysql.install_as_MySQLdb()
    
    1. 根据类自动创建数据库表
        # app下的models.py
    
        python manage.py  makemigrations
        python manage.py  migrate
        
        
        字段:
            字符串类型
            
            
            数字
            
            
            时间
            
            
            二进制
            
            自增(primary_key=True)
            
        字段的参数:
            null               -> db是否可以为空
            default            -> 默认值
            primary_key        -> 主键
            db_column          -> 列名
            db_index           -> 索引
            unique               -> 唯一索引
            unique_for_date    ->
            unique_for_month
            unique_for_year
            auto_now           -> 创建时,自动生成时间
            auto_now_add       -> 更新时,自动更新为当前时间
            
                # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
                # obj = UserGroup.objects.filter(id=1).first()
                # obj.caption = "CEO"
                # obj.save()
                
            choices              -> django admin中显示下拉框,避免连表查询
            blank             -> django admin是否可以为空
            verbose_name      -> django admin显示字段中文
            editable          -> django admin是否可以被编辑
            error_messages    -> 错误信息欠
            help_text         -> django admin提示
            validators          -> django form ,自定义错误信息(欠)
            
            
            创建 Django 用户:python manage.py createsuperuser
            
            
            
            
    2. 根据类对数据库表中的数据进行各种操作
    
        一对多:
        
            a. 外检
            b.
                外键字段_id
            c.
                models.tb.object.create(name='root', user_group_id=1)
                
            d.
                
                userlist = models.tb.object.all()
                for row in userlist:
                    row.id
                    row.user_group_id
                    row.user_group.caption

1、Django请求的生命周期
        路由系统 -> 试图函数(获取模板+数据=》渲染) -> 字符串返回给用户
        
2、路由系统
        /index/                ->  函数或类.as_view()
        /detail/(\d+)          ->  函数(参数) 或 类.as_view()(参数)
        /detail/(?P<nid>\d+)   ->  函数(参数) 或 类.as_view()(参数)
        /detail/               ->  include("app01.urls")
        /detail/    name='a1'  ->  include("app01.urls")
                               - 视图中:reverse
                               - 模板中:{% url "a1" %}
                               
3、视图
    FBV:函数
        def index(request,*args,**kwargs):
            ..
    
    CBV:类
        class Home(views.View):
            
            def get(self,reqeust,*args,**kwargs):
                ..
                
    获取用户请求中的数据:
        request.POST.get
        request.GET.get
        reqeust.FILES.get()
        
        # checkbox,
        ........getlist()
        
        request.path_info
        
        
        文件对象 = reqeust.FILES.get()
        文件对象.name
        文件对象.size
        文件对象.chunks()
        
        # <form 特殊的设置></form>
        
        
    给用户返回数据:
        render(request, "模板的文件的路径", {'k1': [1,2,3,4],"k2": {'name': '张扬','age': 73}})
        redirect("URL")
        HttpResponse(字符串)
        
    
4、模板语言
        render(request, "模板的文件的路径", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': '张扬','age': 73}})
    
    <html>
    
    <body>
        <h1> {{ obj }} </h1>
        <h1> {{ k1.3 }} </h1>
        <h1> {{ k2.name }} </h1>
        {% for i in k1 %}
            <p> {{ i }} </p>
        {% endfor %}
        
        {% for row in k2.keys %}
            {{ row }}
        {% endfor %}
        
        {% for row in k2.values %}
            {{ row }}
        {% endfor %}
        
        {% for k,v in k2.items %}
            {{ k }} - {{v}}
        {% endfor %}
        
    </body>
    </html>
    
5、ORM
    a. 创建类和字段
        class User(models.Model):
            age = models.IntergerFiled()
            name = models.CharField(max_length=10)#字符长度
            
        Python manage.py makemigrations
        python manage.py migrate
        
        # settings.py 注册APP
        
    b. 操作
        
        增
            models.User.objects.create(name='qianxiaohu',age=18)
            dic = {'name': 'xx', 'age': 19}
            models.User.objects.create(**dic)
            
            
            obj = models.User(name='qianxiaohu',age=18)
            obj.save()
        删
            models.User.objects.filter(id=1).delete()
        改
            models.User.objects.filter(id__gt=1).update(name='alex',age=84)
            dic = {'name': 'xx', 'age': 19}
            models.User.objects.filter(id__gt=1).update(**dic)
        查
            models.User.objects.filter(id=1,name='root')
            models.User.objects.filter(id__gt=1,name='root')
            models.User.objects.filter(id__lt=1)
            models.User.objects.filter(id__gte=1)
            models.User.objects.filter(id__lte=1)
            
            models.User.objects.filter(id=1,name='root')
            dic = {'name': 'xx', 'age__gt': 19}
            models.User.objects.filter(**dic)
            
            v1 = models.Business.objects.all()
            # QuerySet ,内部元素都是对象
            
            # QuerySet ,内部元素都是字典
            v2 = models.Business.objects.all().values('id','caption')
            # QuerySet ,内部元素都是元组
            v3 = models.Business.objects.all().values_list('id','caption')
        
            # 获取到的一个对象,如果不存在就报错
            models.Business.objects.get(id=1)
            对象或者None = models.Business.objects.filter(id=1).first()
            
            
            外键:
                v = models.Host.objects.filter(nid__gt=0)
                v[0].b.caption  ---->  通过.进行跨表

外键:
            class UserType(models.Model):
                caption = models.CharField(max_length=32)
              id  caption
            # 1,普通用户
            # 2,VIP用户
            # 3, 游客
                
            class User(models.Model):
                age = models.IntergerFiled()
                name = models.CharField(max_length=10)#字符长度
                # user_type_id = models.IntergerFiled() # 约束,
                user_type = models.ForeignKey("UserType",to_field='id') # 约束,
        
              name age  user_type_id     
            # 张扬  18     3
            # 张A扬 18     2
            # 张B扬 18     2
   
    position:fixed absolute relative

Ajax
    
        $.ajax({
            url: '/host',
            type: "POST",
            data: {'k1': 123,'k2': "root"},
            success: function(data){
                // data是服务器端返回的字符串
                var obj = JSON.parse(data);
            }
        })
    
        建议:永远让服务器端返回一个字典
        
        return HttpResponse(json.dumps(字典))
       
          
多对多:
    创建多对多:
        方式一:自定义关系表
            class Host(models.Model):
                nid = models.AutoField(primary_key=True)
                hostname = models.CharField(max_length=32,db_index=True)
                ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
                port = models.IntegerField()
                b = models.ForeignKey(to="Business", to_field='id')
            # 10
            class Application(models.Model):
                name = models.CharField(max_length=32)
            # 2
            
            class HostToApp(models.Model):
                hobj = models.ForeignKey(to='Host',to_field='nid')
                aobj = models.ForeignKey(to='Application',to_field='id')
                
            # HostToApp.objects.create(hobj_id=1,aobj_id=2)
                
        方式二:自动创建关系表
            class Host(models.Model):
                nid = models.AutoField(primary_key=True)
                hostname = models.CharField(max_length=32,db_index=True)
                ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
                port = models.IntegerField()
                b = models.ForeignKey(to="Business", to_field='id')
            # 10
            class Application(models.Model):
                name = models.CharField(max_length=32)
                r = models.ManyToManyField("Host")
                
            无法直接对第三张表进行操作
            
            obj = Application.objects.get(id=1)
            obj.name
            
            # 第三张表操作
            obj.r.add(1)
            obj.r.add(2)
            obj.r.add(2,3,4)
            obj.r.add(*[1,2,3,4])
            
            obj.r.remove(1)
            obj.r.remove(2,4)
            obj.r.remove(*[1,2,3])
            
            obj.r.clear()
            
            obj.r.set([3,5,7])
            
            # 所有相关的主机对象“列表” QuerySet
            obj.r.all()

Django知识点的更多相关文章

  1. python Django知识点总结

    python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...

  2. django知识点回顾与补充

    一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...

  3. Django 知识点补充

    Django 知识点补充 1 Django如何在Model保存前做一定的固定操作,比如写一条日志 (1)利用Django的Model的Signal Dispatcher, 通过django.db.mo ...

  4. linux django 知识点 安装mysql数据库 和 pycharm

     django 命令及相关知识点 1. 启动 pycharm 命令:sh pycharm.sh 2. 创建 django 项目 : django-admin.py startproject Hello ...

  5. Django知识点归纳总结之HTTP协议与URL

    Django复习知识点归纳总结 1.HTTP协议 ​ 超文本传输协议(Hyper Text Transfer Protocol),是用于万维网服务器与本地浏览器之间的传输超文本的传送协议. ​ HTT ...

  6. django 知识点小结

    以下内容为用django写blog中的一些知识点,权当复习. 一.定义view 1.get_object_or_404()是用get()查询数据,如果不存在就直接返回404 参数: get_objec ...

  7. 八月22日,django知识点总结:

    八月22日,知识点总结: python manage.py makemigrations python manage.py migrate unique=true是指这个字段的值在这张表里不能重复,所 ...

  8. Django知识点整理

    什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. web应用 访 ...

  9. Django知识点汇总

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

随机推荐

  1. Docker 学习7 Dockerfile详解

    一.镜像的生成途径 1.使用当前进程替换上一个进程 exec 2.生成方式 3.dockerfile制作镜像要求 a.要有专有的工作目录. b.要有专门的制作文件,文件名首字母大写 c.如果要打包很多 ...

  2. PTA_输入符号及符号个数打印沙漏(C++)

    思路:想将所有沙漏所需符号数遍历一遍,然后根据输入的数判断需要输出多少多少层的沙漏,然后分两部分输出沙漏.   #include<iostream> #include<cstring ...

  3. 蛤?你要用html做游戏?(笔记版)

    标签(空格分隔):canvas html game 本书是看<html5 Canvas游戏开发实战>(2013)笔记 博主小白,啥也不懂类型,这只是一个笔记,需要的话可以看原书. 书张这样 ...

  4. NOIP2006普及组 Jam的计数法

    普及组重要的模拟题.附上题目链接 https://www.luogu.org/problem/show?pid=1061 (写水题题解算是巩固提醒自己细心吧qwq) 样例输入: bdfij 样例输出: ...

  5. css3_transition: 体验好的过渡效果。附 好看的按钮

    利用css的transition属性详解,上图就是利用transition效果做的一个按钮. transition属性://举例子:transition:all 1s ease;transition: ...

  6. vue Error: No PostCSS Config found in

    最近在做一个vue的移动端的项目,遇到一个问题,我本地的项目运行正常,可是上传到github上的一启动就报错,就是标题上的错误,找了很久,刚开始以为是某个css没有配置,就把本地的复制过去还是报错,无 ...

  7. Firefox 的兼容问题

    Firefox (火狐) 坑 一, css 文本溢出省略号 单行 :  overflow:hidden; text-overflow:ellipsis; white-space:nowrap 多行 : ...

  8. docker container(容器)

    docker 容器 Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用 容器是从镜像创建的应用运行实例.它可以启动,开始,停止,删除,而这些容器都是彼此相互隔离,互不可见的. ...

  9. Java语法细节 - try_finally和set相关

    目录 try-catch-finally的关系 TreeSet和HashSet的实现原理和区别 BigDecimal中的一些坑 当BigDecimal在HashSet/HashMap和TreeSet/ ...

  10. 十八、泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器基础加强

    l 泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器 泛型 1 回顾泛型类 泛型类:具有一个或多个泛型变量的类被称之为泛型类. public class A<T> { ...