django学习总结1
## 内容回顾
#### 1.所有的命令
##### 下载安装
pip install django==1.11.20 - i 源
##### 创建项目
django-admin startproject 项目名
##### 启动项目
python manage.py runserver # 127.0.0.1:8000
python manage.py runserver 80 # 127.0.0.1:80
python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
##### 创建APP
Python manage.py startapp APP名称
##### 数据库迁移
python manage.py makemigrations # 根据models变化生成迁移文件
python manage.py migrate # 将变更记录同步到数据库
#### 2.配置
1. 静态文件
STAITC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'),
]
2. INSTALLED_APPS = [
'app01' 或者 ‘app01.apps.App01Config’
]
3. 中间件
注释掉CSRF有关
4. DATABASES
ENGINE: mysql
NAME: 名字
HOST:IP
PORT: 端口
USER: 用户名
PASSWORD: 密码
5. TEMPLATES
DIRS :[ os.path.join(BASE_DIR ,'templates') ]
#### 3.django使用mysql数据库的流程:
1. 创建一个mysql数据库
2. 数据库的配置:
ENGINE: mysql
NAME: 名字
HOST:IP
PORT: 端口
USER: 用户名
PASSWORD: 密码
3. 告诉django使用pymysql连接mysql数据库
在与settings同级目录下的init。py写:
import pymysql
pymysql.install_as_MySQLdb()
4. 在app下的models中写类(表):
```python
from django.db import models
class Publisher(models.Model): # app01_publisher
pid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32) # varchar(32)
class Book(models.Model):
name = models.CharField(max_length=32)
pub = models.ForeignKey('Publisher', on_delete=models.CASCADE)
class Author(models.Model):
name = models.CharField(max_length=32)
books = models.ManyToManyField('Book')
```
5. 执行数据库迁移的命令
python manage.py makemigrations # 根据models变化生成迁移文件
python manage.py migrate # 将变更记录同步到数据库
#### 4. request
request.method ——》 GET POST
request.GET ——》 url地址上的参数
request.POST ——》POST请求提交的数据
#### 5. response
HttpResponse("字符串") ——》 页面显示字符串
render(reqeust,'模板的文件名', { k1:v1 }) ——》 一个完整的页面#返回值key必须是字符串
redirect('要跳转的地址') ——》 重定向 Location: 要跳转的地址
#### 6.ORM
```python
from app01 import models
# 查
models.Publisher.objects.all() # 获取所有的数据 queryset 对象列表
models.Publisher.objects.filter(条件) # 获取所有满足条件的对象 queryset 对象列表
models.Publisher.objects.get(条件) # 获取一个满足条件的对象 对象 无或者多个就报错
models.Publisher.objects.all().order_by('pk') # 排序 升序
pub_obj.pid pub_obj.pk # 主键
pub_obj.name # 名字
book_obj.pk
book_obj.name
book_obj.pub ——》 书籍所关联的出版社的对象
book_obj.pub_id ——》 书籍所关联的出版社的对象pk
author_obj.books ——》 关系管理对象
author_obj.books.all() ——》 作者所关联的书籍对象
author_obj.books.set([ 所关联对象的id, 所关联对象的id,所关联对象的id ])
author_obj.books.set([ 所关联对象, 所关联对象,所关联对象 ])
# 增加
models.Publisher.objects.create(name='xxxx')
# 外键
models.Book.objects.create(name='xxxx',pub=pub_obj)
models.Book.objects.create(name='xxxx',pub_id=pub_obj.pk)
# 多对多
author_obj = models.Author.objects.create(name='xxxx')
author_obj.books.set([ id,id ])
obj = models.Publisher(name='xxxx')
obj.save()
# 删除
models.Publisher.objects.filter(pk=pk).delete()
models.Publisher.objects.get(pk=pk).delete()
# 修改
pub_obj.name ='new name'
pub_obj.save()
book_obj.name = 'new name'
book_obj.pub_id = pub_obj.id
book_obj.pub = pub_obj
book_obj.save()
author_obj.name = 'new name'
author_obj.save()
author_obj.books.set([id ,id])
```
#### 7.模板
{{ 变量 }}
正向查找
{{对象.找到自己和别人建的多对多的属性.all}}
反向查找
{{对象.找到别人和自己建的多对多的属性_set.all}}
```html
{% for i in list %}
{{ forloop.counter }}
{{ i }}
{% endfor %}
{% if 条件 %}
xxx
{% elif 条件 %}
xxxx
{% else %}
xx
{% endif %}
```
## 今日内容
#### 1. MVC MTV
MVC
- M models
- V view HTML
- C controller 控制器
MTV
- M models
- T template HTML
- V view 函数 业务逻辑
#### 2. 过滤器
语法
{{ value|filter_name }} {{ value|filter_name:参数 }}
**default**
```
{{ value|default:"nothing"}}
```
**add**
数字加减
字符串的拼接
列表的拼接
```
{{ value|add:"2" }}
```
**length**
取变量的长度
**slice**
切片
**truncatechars**
截断字符
**date**
```
{{ value|date:"Y-m-d H:i:s"}}
```
```
# settings 中配置
USE_L10N = False
DATETIME_FORMAT = 'Y-m-d H:i:s'
```
**safe**
Django这段代码是安全的不必转义
https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#built-in-filter-reference
自定义filter
1. 在app下创建一个名为templatetags的Python包 # templatetags不能变
2. 在包内创建py文件 —— my_tags.py
3. 在py文件中下:
```python
from django import template
register = template.Library() # register 不能变
```
4. 写函数+装饰器
```python
@register.filter
def add_str(value, arg=None): # 函数名 就是 过滤器的名字 value变量 arg 给变量添加额外的参数
ret = '{}__{} '.format(value, arg)
print(ret)
return ret
```
5.使用自定义装饰器:
```
{% load my_tags %} # 导入文件
{{ 'alex'|add_str:'sb' }}
```
6.如何让用装饰器实现html语言
```HTML
使用
{{ 'https://www.baidu.com'|show_a:'百度'|safe }}
```
还可以引入
from django.utils.safestring import mark_safe
return mark_safe(obj)
就可以了
django学习总结1的更多相关文章
- 今天主要推荐一下django学习的网址!
前言:每个月忙碌的头20天后,在上班时间投入到django理论学习的过程中,花了差不多3天时间简单的研究了一下django,着实废了我不少脑细胞. 采用虫师前辈的一张图和话: 如果你把这过程梳理清晰了 ...
- Django 学习笔记之四 QuerySet常用方法
QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...
- Django 学习笔记之三 数据库输入数据
假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- Django学习笔记(三)—— 型号 model
疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...
- django学习之Model(二)
继续(一)的内容: 1-跨文件的Models 在文件头部import进来,然后用ForeignKey关联上: from django.db import models from geography.m ...
- Python框架之Django学习
当前标签: Django Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0 Python框架之Django学习笔记(十三) 尛 ...
- Django 学习笔记(二)
Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...
- Django 学习笔记(五)模板标签
关于Django模板标签官方网址https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.IF标签 Hello World/vi ...
随机推荐
- 【LeetCode】583. Delete Operation for Two Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- Docker 与 K8S学习笔记(二)—— 容器核心知识梳理
本篇主要对容器相关核心知识进行梳理,通过本篇的学习,我们可以对容器相关的概念有一个全面的了解,这样有利于后面的学习. 一.什么是容器? 容器是一种轻量级.可移植.自包含的软件打包技术,使应用程序可以在 ...
- 『学了就忘』vim编辑器基础 — 94、vim编辑器介绍
目录 1.vim编辑器简介 2.vim的工作模式 (1)命令模式 (2)输入模式 (3)最后行模式(末行模式) 1.vim编辑器简介 vim是一个全屏幕纯文本(绘个表格或者插个图片就不要想了)编辑器, ...
- Windows下安装配置MySQL
Windows下安装配置MySQL的基本步骤 一.MySQL下载 MySQL官方下载地址https://dev.mysql.com/downloads/mysql/5.7.html#downloads ...
- PowerDotNet平台化软件架构设计与实现系列(11):日志平台
所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...
- [JNI开发]使用javah命令生成.h的头文件
第一步:进入对应的.java目录 javac xxx.java 生成对应的xxx.class文件 第二步:退回到/java目录 javah -classpath . -jni 包名.类名
- Java初学者作业——编写JAVA程序,计算跳水运动员本次动作的最终得分。
返回本章节 返回作业目录 需求说明: 编写JAVA程序,计算跳水运动员本次动作的最终得分. 规则如下: 在跳水比赛中,共有六位裁判对运动员所完成的动作进行评分,每位裁判的评分在0-10之间,运动员最终 ...
- 【java多线程】synchronized和volatile
文章目录 一.synchronized 1.synchronized使用的方法 2.注意 3.不要以字符串作为锁的对象 4.`synchronized`锁的是什么? 二.volatile 1.引出问题 ...
- Hangfire任务调度框架使用
1.HangFire简介 HangFire是一个免费简单实用的分布式后台定时调度服务,在现在.net开发中,人气算是很高的. HangFire提供了内置集成化的控制台,可以直观明了的查看作业调度情况, ...
- linux 设置开机自动启动应用
作为一个开发,项目现在一般都是部署在虚拟机上的linux,数据库也是按照在l虚拟机上的linux,一旦关机了,在开机程序都没打开,又要一个个去开,很麻烦,所以现在我现在使用supervisor去做一个 ...