Diango:Django基础
一、创建python虚拟机并安装Django
解决同包不同版本的依赖问题,使用python虚拟机。在虚拟机中安装包,不影响实际环境中的包。
虚拟机实际上是复制了物理机上的python环境。
安装虚拟环境:
sudo pip install virtualenv
sudo pip install virtualenvwrapper
如果是windows上安装,则:
pip install virtualenvwrapper-win
创建work_home变量(虚拟环境文件存放位置):
创建虚拟环境命令:
mkvirtualenv <虚拟环境名>
如创建python3虚拟环境:
mkvirtualenv -p python3 bj11_py3
进入虚拟环境工作:
workon <虚拟环境名>
查看机器上有多少个虚拟环境:
workon 空格 + 两个tab键
退出虚拟环境:
deactivate
删除虚拟环境:
rmvirtualenv <虚拟环境名>
虚拟环境下安装包的命令:
pip install 包名
注意:不能使用sudo pip install 包名,这个命令会把包安装到真实的主机环境上而不是安装到虚拟环境中。
查看虚拟环境中安装了哪些python包:
pip listpip freeze
安装django环境:
pip install django==1.8.2
建立一个django项目步骤如下:
1.创建django项目
2.创建一个application
django-admin startproject 项目名称
3.创建application之后,需要对这个application注册。即在setting.py中添加相应代码
在INSTALLED_APPS的末尾添加一行app的名字.
4.运行 python manage.py runserver
二、Django项目结构
Django遵循MVT架构
M:模型 与数据库交互
V:视图 接受请求,进行处理
T:模板 产生HTML页面
创建django项目
文件说明
__init__.py :说明这是一个python包
settings.py :项目的配置文件
url.py :进行url路由
wsgi.py :wsgi协议,web服务器和django交互的入口
manage.py :项目管理文件,通过该文件管理整个项目
创建application
文件说明
admin.py :建立应用与项目之间的联系,需要对应用进行注册。网站后台管理相关文件
models.py :和数据库交互模块
views.py :定义处理函数,视图函数,返回应答
tests.py :写测试代码的文件
数据库配置
三、创建模型
1.在应用的modles.py中编写模型类,继承models.Model类
class Book(models.Model):name = models.CharField(max_length=20) #定义字符串格式,设置最大值data = models.DateField #定义时间格式number = models.IntegerField #定义整数格式
指定使用数据库中的哪个表,可在模型类中重写Meta类,该类用于指定表名:
class Meta:
db_table = '表名'
2.创建模型类后,执行命令生成迁移文件
python manage.py makemigrations
执行成功后,在app包下会多出一个migrations包
3.执行迁移生成表
python manege.py migrate
4.在adim.py下设置表管理员
admin.site.register(User_Info)
或
admin.site.register(User_Info,UserAdmin) 第二个参数表示由哪个用户管理,默认admin
四、通过模型类操作数据表、模型类数据库关系(model)
使用模型类对数据表CRUD
1.在app中的models导入models模块
from django.db import models
2.用模块类创建实例
b = Book()
3.对实例的属性赋值
b.name = "a book"b.number = 23
4.调用实例的save属性,将内容写入数据库
b.save()
5.查询
模块类中的objects类的get方法可以查询符合条件的实例,并返回该实例。
b2 = Book.objects.get(id=1)type(b2)
返回:AppTest.models.Book
可以查看b2的属性,如:
h1.book.name返回: a book
修改属性后,调用save函数,可对数据库进行更新
6.删除
b.delete()
模型的关系
1.创建多类时,在多类中添加外键,外键值为一类的类名(表名),如:
class Hero():name = models.CharField(max_length=20)age = models.IntegerField()#添加外键(django 2.0以上,需要加上on_delete,否则会报错)book = models.ForeignKey("Book", on_delete=models.CASCADE)
2.创建实例
多类创建实例与一类基本相似,需要注意的是:
多累中的外键的参数是一个对象。即一类的实例。
3.查看关联的表属性
多类:创建多类实例后,该实例的外键属性是一个对象,该对象即一类的实例。故可用那个对象来获取一类实例中的属性。
一类:一类中查看所有相关的多类,用: 实例.多类名_set.all(),或 多类名_set.get() 。
注:类名默认小写
五、后台管理(model)
1.本地化(语言、时间)
修改项目下的setting.py文件
2.创建管理员
命令:
python manage.py createsuperuser
创建成功后,在 IP:PORT/admin 进入后台管理界面
3.注册模型类
在应用下的admin.py中注册模型类。
告诉djang框架根据注册的模型类来生成对应表管理页面。
4.自定义管理界面
管理界面默认显示:
如果需要使名字显示自定义的内容,则在模型类中重写__str__函数,该函数返回什么,这里就显示什么。如:
5.自定义管理界面
需在admin.py中写自定义管理模型类。类名可以自定义,如
class BookAdmin(admin.ModelAdmin):list_display=['name','number']
注: list_display中写的字段即界面上显示的字段。
在admin.py中注册模型类时,参数中指定管理模型类,如:
admin.site.register(Book, BookAdmin)
注: 括号内第一个参数是模型类,第二个参数为管理模型类。
六、视图(view)配置与重定向
1配置应用中的urls.py
在项目下的urls.py中的urlpatterns列表中添加应用下的urls.py
导包:from django.conf.urls import include,url语法:path('', include("AppTest.urls")), 或url(r'^', include("AppTest.urls")),
path中有两个参数,第一个为访问时IP后的第一个字符,如admin。第二个参数为用include函数加应用下的urls.py。
2.配置应用下的urls.py
在应用下的urls.py中的urlpatterns列表写入路由,如:
语法:url(r'^index', views.index)
url中有两个参数,第一个参数是浏览器访问的页面,第二个参数为view.py中的函数。
3.定义视图函数,用于返回浏览器请求
在app的views.py内添加视图函数,参数为HttpRequest。需要返回HttpResponse()
from django.http import HttpResponsedef index(request):return HttpResponse(.......)
注:页面跳转,如果访问一个页面时,要返回的是另一个页面的内容,则return时这样写:
return HttpResponseRedirect('/index')
表示让浏览器再去访问/index。
七、模板(html)
1.设置模板文件目录
在项目的setting.py里的TEMPLATES中的'DIRS'列表中添加模板路径(页面文件存放路径)
在setting.py中,默认有这个变量:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
即项目的绝对路径。可以通过该变量拼接相对路径,使项目移动后仍然可以找到模板文件。
故'DIRS'中可以这样写:
'DIRS': [os.path.join(BASE_DIR, 'templates')]
注:一般会在templates下新建一个与应用同名的文件夹,在该文件夹下存放对应应用的模板,以分隔应用模板。
2.使用模板文件
在视图函数中使用模板文件(views下的函数)
a)获取模板内容
temp = loader.get_template('python/index.html')
b)定义 上下文
#context = RequestContext(request,{})context = {替换字典}
c)渲染模板
res_html = temp.render(context)
d)返回给浏览器
return HttpResponse(res_html)
但是django自带render函数,所以可以直接写成:
return render(request, "python/index.html", {"key":"value"})
参数中的字典可以对页面内容进行替换,在页面中用两个大括号把变量圈起来{{}},然后key对应变量名,value为变量值,即可对页面进行修改。如:
return render(request, "python/index.html", {"context":"让我们来试一试"})
在页面中使用for循环,要用{%%},如:
{% for i in list %}<li>{{i}}<li>{% endfor %}
注:不能直接用range,因为range是一个生成器,不是列表,需要在views中把李斯特替换成列表,如:
return render(request, "python/index.html", {"list":list(range(10))})
从数据库中读取信息并显示:
1.views.py
a)从模板中获取信息
book_list = Book.objects.all()
b)替换页面内容
return render(request,"book/index.html", {"book_list":book_list})
2.页面遍历
{% for book in book_list %}{{book}}</br>{% endfor %}
八、静态文件配置
1.在项目中创建static文件夹
2.修改setting.py
STATIC_URL = '/static/'STATICFILES_DIRS = [os.path.join(BASE_DIR + "static")]
html上:
原先写法
{# <link rel="stylesheet" href="/static/css/reset.css"/>#}
不使用路径写法,方便settings改配置static写法
头前:
{% load staticfiles %}
头:
<link rel="stylesheet" href="{% static "css/reset.css" %}"/><link rel="stylesheet" href="{% static "css/navigation.css" %}"/><link rel="stylesheet" href="{% static "css/register.css" %}"/>
九、模板语言与过滤器
模板语言
1.模板变量
模板变量名是由数字,字母,下划线和点组成的,不能以下划线开头。
使用模板变量:{{模板变量名}}
模板变量的解析顺序:
例如:{{ book.btitle }}
- 首先把book当成一个字典,把btitle当成键名,进行取值book['btitle']
- 把book当成一个对象,把btitle当成属性,进行取值book.btitle
- 把book当成一个对象,把btitle当成对象的方法,进行取值book.btitle
例如:{{book.0}}
- 首先把book当成一个字典,把0当成键名,进行取值book[0]
- 把book当成一个列表,把0当成下标,进行取值book[0]
如果解析失败,则产生内容时用空字符串填充模板变量。
使用模板变量时,.前面的可能是一个字典,可能是一个对象,还可能是一个列表。
2 模板标签
{% 代码段 %}for循环:{% for x in 列表 %}{{循环内容}}# 列表不为空时执行{% empty %}# 列表为空时执行{% endfor %}
可以通过{{ forloop.counter }}得到for循环遍历到了第几次。
{% if 条件 %}{% elif 条件 %}{% else %}{% endif %}
模板中支持逻辑运算,如:
关系比较操作符:> < >= <= == !=
注意:进行比较操作时,比较操作符两边必须有空格。
逻辑运算:not and or
3.模板注释
单行注释: {# 注释内容 #}
多行注释:
{% comment %}注释内容{% endcomment %}
过滤器
1.过滤器的使用
过滤器用于对模板变量进行操作。
date:改变日期的显示格式。
length:求长度。字符串,列表.
default:设置模板变量的默认值。
格式:
模板变量|过滤器:参数
如:
{{book.date|date:'Y年-m月-d日'}}
2.自定义过滤器
- 在app下新建名为templatetags的python包。
- 在templatetags包中新建py文件,文件名不固定,例:filters.py
- 导包
from django.template import Library
4.创建Library对象
register = Library()
5.创建过滤器函数并装饰
#定义函数,进行装饰,装饰后即成为过滤器@register.filterdef mod(num):'''判断参数是否为偶数'''return num%2 == 0
自定义的过滤器函数,至少有一个参数,最多两个。使用过滤器时,默认将 "|" 前的东西作为参数传给过滤器。
如果有两个参数,则默认将 | 前的东西作为第一个参数,在过滤器后面加 :,在 : 后面写第二个参数。如:
{{book.date|date:'Y年-m月-d日'}}
模板继承
当多个页面都有相同内容时,可使用模板继承,将相同部分写进父模板中,子模板通过继承父模板获取父模板的内容。
子模板继承父模板时,用
{% extends '父模板路径' %}
父模板路径为相对templates路径。继承时,子模板中新建时默认包含的代码都要删去。且直接在子模板中写代码是无效的。
子模板需要写代码时,需要在父模板中先预留块。子模板再重写预留块。
在父模板里可以定义块,使用标签:
{% block 块名 %}中间内容(块中间可以写内容,也可以不写){% endblock 块名%}
子模板去继承父模板之后,可以重写父模板中的某一块的内容。
继承格式:
{% extends 父模板文件路径%}{% block 块名 %}{{ block.super}} #获取父模板中块的默认内容
重写的内容
{% endblock 块名%}
模板转义
在views.py中,使用render函数替换模板内容时,如果使用到<h1><h1>之类的标签时,传过去的是字符串,并不会变成标签。所以需要关闭html转义。
如:
在模板上下文中的html标记默认是会被转义的。
小于号< 转换为<大于号> 转换为>单引号' 转换为'双引号" 转换为 "与符号& 转换为 &
关闭方式:
1.使用过滤器
{{ 模板变量|safe}}
2.过滤开关
{% autoescape off %}模板语言代码{% endautoescape %}
Diango:Django基础相关推荐
- Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)
阅读目录 摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大 ...
- python路由编程_Python Django基础二之URL路由系统
MVC和MTV框架 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务 ...
- Django基础核心技术之Model模型的介绍与设计
Django基础核心技术之Model模型的介绍与设计 原创: Yunbo Shi Python Web与Django开发 2018-05-03 Django网络应用开发的5项基础核心技术包括模型(Mo ...
- Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)...
摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大主流Web ...
- Django基础-Web框架-URL路由
Django基础-Web框架-URL路由 一.Django基础–Web框架 MVC和MTV框架 MVC 把Web应用分为模型(M).视图(V).控制器(C)三层,他们之间以一种插件式的,松耦合的方式联 ...
- 1,Django 基础一
Django 基础 基础知识: 1,什么是web应用? web本质就是一个socket服务端,用户的浏览器就是一个socket客户端,基于c/s架构的b/s软件开发架构的应用 浏览器中敲入网址回车发送 ...
- Django基础三之视图函数
Django基础三之视图函数 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML ...
- django基础入门之搭建博客系统
Django基础 Django采用了MVC的软件设计模式,即模型M,视图V和控制器C. 安装django: pip install django=版本 新建一个目录文件进入cmd 启动一个项目 d ...
- 学一点django基础
学一点Django基础 目录 文章目录 目录 一.Django框架的介绍 Django的安装 Django框架开发 创建项目的指令 Django项目的目录结构 URL 介绍 视图函数(view) Dj ...
- Django基础教程
一.Django基础与设计模型 1.Django是什么? Django 是用 Python 开发的一个免费开源的 Web 框架,可以用于快速搭建高性能.优雅的网站,Django 提供了许多网站后台开发 ...
最新文章
- 别说了,有画面了!Google文本生成图像取得新SOTA,CVPR2021已接收
- Mysql实战:主从同步
- Vue.js学习系列(二十七)-- 计算属性(一)
- Phonegap + JqueryMobile常见问题
- C++ STL 三大组件(容器|算法|迭代器) 初步使用01
- Linux 系统应用编程——文件I/O
- mooc哈尔滨c语言作业答案,哈尔滨工业大学C语言2016年MOOC在线测试答案.doc
- VS中监视窗口,即时窗口和输出窗口的使用
- NanShan企业即时通讯开始写博客
- Java设计模式学习总结(16)——行为型模式之命令模式
- 优麒麟十年,聚生态之力压缩时间壁垒
- 我的图书《深入浅出线性代数》
- 如果计算机正执行屏幕保护程序 当用户,计算机一级考试参考试题(含答案)篇篇一.doc...
- Java Jsoup爬虫入门
- 项目,项目集与项目组合的关系
- 嵌入式系统开发笔记88:认识51微控制器系统架构
- Linux系统的优点小结
- 「ZJOI2009」多米诺骨牌
- 深度学习 Day 8——解决GIF生成错误以及有关GAN过程问题
- C语言求数列最小公倍数,C语言复习---获取最小公倍数(公式法:两个数相乘等于最小公倍数乘以最大公约数)...
热门文章
- java early eof_idea克隆项目,git clone出现early EOF问题的解决方案
- 中小学学校视频直播系统怎么搭建
- LV算法和回溯法结合解n后问题
- 对伪装docx文件病毒的逆向分析
- swagger首页空白
- iOS 调试:DerekSelander【 LLDB aliases/regexes and Python scripts to aid in your debugging sessions】
- 【迅为iMX6Q】开发板烧写Uboot后串口无任何输出的问题解决
- linux内核漏洞分类,blog/linux kernel double-free类型漏洞的利用.md at master · snorez/blog · GitHub...
- 可在线使用的调色板颜料工具
- Qt学习:QtCharts绘制动态曲线,实时更新数据与坐标轴