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:存放模板

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

3:修改默认的Static,templates文件夹路径:

        修改模板文件夹:在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名)]

5:urls.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:请求页面全路经:print(request.path)#返回请求路径

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

GET:GET参数

POST:POST参数

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

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

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

7:HttpResponse:

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

8:Django数据库的配置:

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

9:数据库引擎:

Sqlite:django.db.backends.sqlite3

Mysql: django.db.backends.mysql

10:切换mysql数据库:

进入seetings,database 处 ,填写

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

进入__init__处,填写

import pymysql
pymysql.install_as_MySQLdb()

更新数据库操作。

 

11:orm机制:

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

12:models.py的定义:

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

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

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

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

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

模型常用的字段:

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

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

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

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

编写代码:

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=(('','男'),('','女'),))#定义一个布尔类型字段
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:数据模块的扩展属性:

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

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

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

Example(1):在、改变显示的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):数据库字段设置是否可以为空

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

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

default: 字段默认值

15:模型的扩展属性:

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

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

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

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

Ordering = [‘排序字段’]

 

16:migrations文件夹是做什么的?

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

17:orm的常用操作:

往表里添加数据:

利用shell方法:python manage.py shell

create添加操作:(create和save)

Human.objects.create(name=’大刘’)#在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)先获取,再修改。

           例子:修改id为1的名字为江蛤:

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

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

          (3)写入:human.save()

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

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

          (1)Publiser.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的基础操作总结的更多相关文章

  1. Python学习---Django的基础操作180116

    Django创建数据库操作 django流程之model实例 settigs.py:更改Django2.0.1的配置,更新为之前的路径配置 'DIRS': [os.path.join(BASE_DIR ...

  2. Django Model基础操作

    关于设计django model django为我们集成了ORM对数据库进行操作,我们只需要进行定义model,django就会自动为我们创建表,以及表之间的关联关系 创建好一个django项目-首先 ...

  3. Django开发基础----操作数据库

    Django中对数据库的操作是由Models来完成的 Models是什么? 通常,一个Model对应数据库的一张数据表 Django中Models以类的形式出现 它包含了一些基本字段以及数据的一些行为 ...

  4. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  5. Django笔记&教程 6-2 表单(Form)基础操作

    Django 自学笔记兼学习教程第6章第2节--表单(Form)基础操作 点击查看教程总目录 1 - 编写表单类 创建新的表单类的代码,一般写到一个专门的forms.py文件中(一般放在对应的app文 ...

  6. Python之路【第十六篇】:Django【基础篇】

    Python之路[第十六篇]:Django[基础篇]   Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...

  7. SLAM+语音机器人DIY系列:(一)Linux基础——3.Linux命令行基础操作

    摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...

  8. 【Python全栈-后端开发】Django入门基础-2

    Django入门基础知识-2 一 .模版 一.模版的组成 HTML代码+逻辑控制代码 二.逻辑控制代码的组成 1  变量(使用双大括号来引用变量) {{var_name}} 2  标签(tag)的使用 ...

  9. Django中-事务操作

    如何在Django中进行事务操作呢? 近期,公司里要使用Django开发一套金融相关的系统. 涉及钱了.....安全安全安全 如果钱转到一半,系统崩了,咋办? 如果钱汇到一半,系统崩了,咋办? 如果东 ...

随机推荐

  1. [置顶] zabbix告警信息-lykchat信息发送系统

    lykchat信息发送系统 lykchat信息发送系统是Python3开发的,通过模拟微信网页端,基于个人微信号,为系统管理人员提供信息发送工具. 实现的功能有用户登录管理.微信登陆管理和微信信息发送 ...

  2. windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换

    设置坐标映射    (1)Windows坐标系统 Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系.一般而言, GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠 ...

  3. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出“欢迎下次光临” 在网页中弹出框输入1   网页输出“查询中……” 在 ...

  4. 【工具类】Date、Long、String 类型互转

    开发常常遇到Date.Long.String 三种类型数据须要互转的问题.以此记录. public static void main(String[] args) throws ParseExcept ...

  5. UNP学习笔记(第三十章 客户/服务器程序设计范式)

    TCP测试用客户程序 #include "unp.h" #define MAXN 16384 /* max # bytes to request from server */ in ...

  6. eclipse高速查找一个变量、方法或者类被引用的地方

    近期不停debug,拿到一个变量之后总是要先概览一下才好下手,之前一直用Ctrl+F来做,太麻烦. 今天查了下eclipse使用,发现有快捷键,用法: 先双击要查看的变量.方法或者类,使之被选中,然后 ...

  7. HTML5 Support In Visual Studio 2010

    最近HTML5浪潮已经开始了,VS2010已经有一个扩展支持在HTML5智能提示.你可以从这里下载这个扩展: http://visualstudiogallery.msdn.microsoft.com ...

  8. C#命名空间大全详细教程

    www.51rgb.com System 命名空间包含了定义数据类型.事件和事件处理程序等基本类: System.Data 命名空间包含了提供数据访问功能的命名空间和类: System.IO 命名空间 ...

  9. CocoaAsyncSocket 文档1:Socket简单介绍

    前言 CocoaAsyncSocket是 IOS下广泛应用的Socket三方库,网上相关样例数不胜数.这里我就不直接上代码,本文由B9班的真高兴发表于CSDN博客.另辟一条思路:翻译SocketAsy ...

  10. 使用sphinx生成美观的文档

    先上效果图 详情 首先,须要知道什么是restructuredtext.能够理解为类似于markdown的一个东西. 然后 安装.pip install sphinx 进入存放文档的文件夹,在命令行, ...