• Django的基础操作总结


    1:准备开始

    建立一个新的project: django-admin.py startproject XXXXXX(名称)

    建立一个新的App:python manage.py startapp XXXXX(名称)

    app响应:打开project文件下的seettings,找到INSTALLED_APPS ,填写app名字

    MTV模式models:业务对象和数据库关系

                  Views:业务逻辑

               Templates:页面展示

    Django如何运行:请求-中间件-url分发器-处理http请求-调用数据模型-模板展示界面-返回一个http响应-发送给客户端

    Django mtv的设计模式优点:组件松懈,目的明确,不相互影响。

    同步数据库python manage.py makemigrations

                python manage.py migrate

    创建管理员:python manage.py createsuperuser

    2:开发开始:

    1:建立App后所需要的另建的文件夹:Static:存放静动态文件

                                                 Templates:存放模板

    2Static,temelates存放位置:App文件根目录

    3:修改默认的Statictemplates文件夹路径:

            修改模板文件夹:在project文件夹下找到seettings,找到Templates项,在‘DIRS’处填写templates的路径

            修改静态文件夹:在project文件夹下找到seettings,新建’STATICFILES_DIRS‘项,

    写法如下:

    STATICFILES_DIRS = (os.path.join(BASE_DIR,’STATIC’)#STATIC是路径

    4:多个App下,定义不同的urls.py:

    写法:

    项目urls.py

    import include

    Urlpatterns = [Url(r’^’,include(‘XXX.urls’))(app)]

    App urls.py:

    Urlpatterns = [Url(r’^’,views.XXX(app)]

    5urls.py相关知识:

    Urls.py被称为路由配置文件,就是一个调用视图函数的映射。
    Urlpatterns配置形式:

    无前缀,使用列表配置:Urlpatterns = [Url(r’^’,views.XXX(app)]

    基本模式:Urlpatterns = [url(正则表达式,view参数,别名,前缀)]

    Url常用写法:

    url(r’^text/ d{2} / $’,views.test):定义一个test开头的后接两位数字的网址

    Example:http://127.0.0.1:8080/test/21/

    6:HttpRequest相关属性:

    Path:请求页面全路经:printrequest.path)#返回请求路径

    Method:请求使用的HTTP方法的字符串表示:if request.methoid == ‘GET’ or ‘POST’d

    GET:GET参数

    POST:POST参数

    REQUEST:POSTGET属性的集合体,优先度上有差异,先查找POST,再查找GET

    User代表当前登陆的用户,django.contrib.models.User对象,通过Useris_authenticated()判断是否登陆:if request.user.is_authenticated():

    Session:可读写属性,代表当前会话的字典对象

    7HttpResponse:

    HTTPResponse必须自己创建,每个view请求处理的方法必须返回一个Response值。

    8Django数据库的配置:

    Django支持sqlite,mysql,oracle,等第三方数据库

    9:数据库引擎:

    Sqlitedjango.db.backends.sqlite3

    Mysql: django.db.backends.mysql

    10:切换mysql数据库:

    进入seetingsdatabase 处 ,填写

    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'test_db',
    'USER': 'lau',
    'PASSWORD':'',

    进入__init__处,填写

    import pymysql
    pymysql.install_as_MySQLdb()

    更新数据库操作。

     

    11orm机制:

    Object Relational Mapping的简称,用面向对象的方式去操作数据库的操作,例如创建表,增加,修改,查询等操作。

    12models.py的定义:

    首先必须确定models的基本结构

    每个模型相当于单个数据表

    例如,一个数据库,里面的元素有员工,工作类型,工作名称,员工地址,所在城市这几项。

    确定元素的关系(一对一,一对多):工作类型-员工(一对多)

    模型之间的三种关系(一对一,OneToOneField),(一对多,ForeginKey),(多对多,ManyToMany)

    模型常用的字段:

    1BoleanField(布尔) 2: CharField(字符串) 3: DateField(日期)

    4DateTimeField(日期时间)5DecimalField(小数字段)6IPAddressField(IP)

    7:ImageField(图片)8TextField(文本)9URLField(网页地址)

    确定元素的字段:员工(性别,年龄)

    编写代码:

    from django.db import models
    class Publiser(models.Model):
        company_name = models.CharField(max_length=30)#定义一个‘公司名’的字段,最大长度30
        company_address = models.CharField(max_length=60)
        company_city = models.CharField(max_length=50)
        company_web = models.URLField()#定义一个URL类型字段
    class Human(models.Model):
        name = models.CharField(max_length=30)import pymysql_x000B_pymysql.install_as_MySQLdb()
    
    
    class HumanDetail(models.Model):
        sex = models.BooleanField(max_length=1,choices=(('0',''),('1',''),))#定义一个布尔类型字段
        email = models.EmailField() #定义一个email字段
        address = models.CharField(max_length=50)
        birthady = models.DateField()
        human = models.OneToOneField(Human)
    class Work(models.Model):
        Work_name = models.CharField(max_length=100)
        Work_human = models.ManyToManyField(Human)
        Work_company = models.ForeignKey(Publiser)
        Work_date = models.DateField()

    编写上述代码后,在admin.py中编写如下代码,将信息注册至后台

    from .models import *
    admin.site.register(Publiser)
    admin.site.register(Human)
    admin.site.register(HumanDetail)
    admin.site.register(Work)

    13:数据模块的扩展属性:

    Example1):如果想要显示一个中文名称,如何去做?Verbose_name = “”

    class Human(models.Model):
        name = models.CharField(max_length=30)
        class Meta:
            verbose_name = '姓名'
            verbose_name_plural = verbose_name

    14:定义一个模型的方法:

    Example1):在、改变显示的project的名字,让它显示中文,如何去做?def __str__(self),python2:def _unicode_()

    class Human(models.Model):
        name = models.CharField(max_length=30)
        class Meta:
            verbose_name = '姓名'
            verbose_name_plural = verbose_name
        def __str__(self):
            return self.name

     

    15:模型常用的字段选项:

    null(null=True|False):数据库字段设置是否可以为空

    blankbalnk=True|False):表单验证字段是否为空

    choices:轻量级配置字段可选属性

    default: 字段默认值

    15:模型的扩展属性:

    什么是扩展属性?排序字段,设置名称等

    如何设置?通过内部类Meta设置扩展属性

    例:改变Model显示的名称,并且修改名称使不为复数状态,排序字段,降序

    class Meta:
        verbose_name = '公司信息'
        verbose_name_plural = verbose_name

        Ordering = [‘排序字段’]

     

    16migrations文件夹是做什么的?

    用来存放通过makemigrations命令生成的数据库脚本,app目录下必须要有该目录,并且要有__init__.py才能使用数据库同步功能

    17orm的常用操作:

    往表里添加数据:

    利用shell方法:python manage.py shell

    create添加操作:(createsave)

    Human.objects.createname=’大刘’)#Human表里添加名为大刘的数据

    Object:model的默认管理器,create是管理器的方法

    save插入信息: pub = Publiser()  /  pub.company_name = ‘233’  /  pub.save()

    主外键关系处理:关联id方式:human_id = 1

    多对多关系处理 human = Human.objects.get(id=23)

                     work = Work.objects.get(id=1)

                     human.Work_human.add(work)

    修改某数值:一般套路:(1)先获取,再修改。

               例子:修改id1的名字为江蛤:

              1)获取:human = Human.objects.get(id=1)

              2)修改:human.name = '江蛤'

              3)写入:human.save()

               特殊套路:(一步到位fliter update):多对多关系处理

               例子:修改id2的城市名为成都

              1Publiser.objects.filter(id=2).update(company_city='成都')

    查询数值:(堕性查询)

             查询human下全部数值:human.object.all()

    Queryset特点:可迭代,可切片

    QuerySet常用的API

    Get:返回所给的筛选条件相匹配的对象,结果有且只有一个,如果超过一个抛出异常Mulitpe,没有结果抛出DoesNot

    all返回查询所有结果。

    order_by:查询结果排序

    reverse反向排序

    distinct返回结果剔除重复记录

    values:返回一个可迭代的字典序列

    filter:包含条件筛选查询匹配对象

    execude:包含条件筛选查询不匹配对象

    count:返回匹配查询的对象数量

    first返回第一条记录

    last:返回最后一条记录

    exists:如果包含数据,返回True,反之,返回False

    多表查询:

    例子:

    查询所有作者的信息:作者名字在作者表中,作者信息在作者详情表中,有一个外键对应作者表

    调用方法:authorDetail.obejcts.value(‘author__name’,’address’):双下划线调用

    聚合查询和分组查询:

    如何判断使用何种查询:

    查询某某作者书价格总数:使用聚合查询:

    Publisher.objects.values(‘author_name’).annote(Sum(‘price’))

    查询每个作者书价格总数:使用分组查询:

    From django.db.models import *

    Publisher.objects.fileter(name=’XXX’).aggregate(count())

    annote:用于用于分组查询,计算总值

    aggregate:用于聚集查询,返回一个聚合值的字典

    聚合函数:

    Avg:平均值

    Count:返回被关联的数量

    Max:最小值

    Min:最大值

    Sum:总和

    如何使用原生Sql

     

     

     

    模板标签和逻辑控制:

    (1)模板的组成:html + 逻辑控制代码

    (2)逻辑控制代码组成:变量(双大括号{{ 变量 }}view传递而来)

                           标签 (单大括号,百分号{% 标签 %}

                           过滤器 {{变量 | 过滤器:参数”}}

    (3)常用标签:{% if %}:and of not 可以组织逻辑,搭配{% elif %}

                   {% ifequal %}:搭配{% ifnotequal %},比较是否相等

                   {% for %}:循环一个list

                   {% cycle %}:循环时轮流使用给定的字符串列表的值

                   {##},{% comment %}:注释

                   {% csrf_token %}:生成csrf_token标签,防止跨站攻击

                   {% debug %}:调试

                   {% autoescape %}:自动转义设置

                   {% firstof %}:输出一个值不等于False的变量

                   {% load %}:加载标签库

                   {% now %}:获取当前时间

                   {% spaceless %}:移除空格

                   {% url %}:引入路由地址

                   {% verbatim %}:禁止render

                   {% with %}:简单变量名缓存复杂变量名

    模板的包含与继承:

    包含:

         示例:在templates文件夹下新建一个html文件,将html文件中的内容添加到主html

               使用{% include ‘新文件名.html’ %}添加到主文件html任何地方

         路径导入:{% include ‘文件夹名/新文件名.html’ %}

     

    继承:先构造一个基础模板,然后在子模板处对它所包含站点共用部分和定义重载。

    示例:{% block %} : 定义块

          {% entend %} : 继承父模板

     

    Form知识点:

    主要用于表单系统,所有表单类都作为django.forms.Form的子类

    表单系统分两种,基于django.form.Form:所有表单的父亲

                    基于django.forms.ModelForm:模型类绑定

  • 相关阅读:
    设计模式七大原则之单一职责原则
    机器学习入门与进阶
    Django之路
    Python编程之路
    Python练习1
    Docker入门与进阶
    运维相关
    Node.js(一)
    位运算
    双指针算法
  • 原文地址:https://www.cnblogs.com/Yemilice/p/9746793.html
Copyright © 2020-2023  润新知