一、创建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 }}

  1. 首先把book当成一个字典,把btitle当成键名,进行取值book['btitle']
  2. 把book当成一个对象,把btitle当成属性,进行取值book.btitle
  3. 把book当成一个对象,把btitle当成对象的方法,进行取值book.btitle

例如:{{book.0}}

  1. 首先把book当成一个字典,把0当成键名,进行取值book[0]
  2. 把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.自定义过滤器

  1. 在app下新建名为templatetags的python包。
  2. 在templatetags包中新建py文件,文件名不固定,例:filters.py
  3. 导包
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基础相关推荐

  1. Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)

    阅读目录 摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大 ...

  2. python路由编程_Python Django基础二之URL路由系统

    MVC和MTV框架 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务 ...

  3. Django基础核心技术之Model模型的介绍与设计

    Django基础核心技术之Model模型的介绍与设计 原创: Yunbo Shi Python Web与Django开发 2018-05-03 Django网络应用开发的5项基础核心技术包括模型(Mo ...

  4. Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)...

    摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大主流Web ...

  5. Django基础-Web框架-URL路由

    Django基础-Web框架-URL路由 一.Django基础–Web框架 MVC和MTV框架 MVC 把Web应用分为模型(M).视图(V).控制器(C)三层,他们之间以一种插件式的,松耦合的方式联 ...

  6. 1,Django 基础一

    Django 基础 基础知识: 1,什么是web应用? web本质就是一个socket服务端,用户的浏览器就是一个socket客户端,基于c/s架构的b/s软件开发架构的应用 浏览器中敲入网址回车发送 ...

  7. Django基础三之视图函数

    Django基础三之视图函数 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML ...

  8. django基础入门之搭建博客系统

    Django基础 Django采用了MVC的软件设计模式,即模型M,视图V和控制器C. 安装django: pip install django=版本 新建一个目录文件进入cmd   启动一个项目 d ...

  9. 学一点django基础

    学一点Django基础 目录 文章目录 目录 一.Django框架的介绍 Django的安装 Django框架开发 创建项目的指令 Django项目的目录结构 URL 介绍 视图函数(view) Dj ...

  10. Django基础教程

    一.Django基础与设计模型 1.Django是什么? Django 是用 Python 开发的一个免费开源的 Web 框架,可以用于快速搭建高性能.优雅的网站,Django 提供了许多网站后台开发 ...

最新文章

  1. 别说了,有画面了!Google文本生成图像取得新SOTA,CVPR2021已接收
  2. Mysql实战:主从同步
  3. Vue.js学习系列(二十七)-- 计算属性(一)
  4. Phonegap + JqueryMobile常见问题
  5. C++ STL 三大组件(容器|算法|迭代器) 初步使用01
  6. Linux 系统应用编程——文件I/O
  7. mooc哈尔滨c语言作业答案,哈尔滨工业大学C语言2016年MOOC在线测试答案.doc
  8. VS中监视窗口,即时窗口和输出窗口的使用
  9. NanShan企业即时通讯开始写博客
  10. Java设计模式学习总结(16)——行为型模式之命令模式
  11. 优麒麟十年,聚生态之力压缩时间壁垒
  12. 我的图书《深入浅出线性代数》
  13. 如果计算机正执行屏幕保护程序 当用户,计算机一级考试参考试题(含答案)篇篇一.doc...
  14. Java Jsoup爬虫入门
  15. 项目,项目集与项目组合的关系
  16. 嵌入式系统开发笔记88:认识51微控制器系统架构
  17. Linux系统的优点小结
  18. 「ZJOI2009」多米诺骨牌
  19. 深度学习 Day 8——解决GIF生成错误以及有关GAN过程问题
  20. C语言求数列最小公倍数,C语言复习---获取最小公倍数(公式法:两个数相乘等于最小公倍数乘以最大公约数)...

热门文章

  1. java early eof_idea克隆项目,git clone出现early EOF问题的解决方案
  2. 中小学学校视频直播系统怎么搭建
  3. LV算法和回溯法结合解n后问题
  4. 对伪装docx文件病毒的逆向分析
  5. swagger首页空白
  6. iOS 调试:DerekSelander【 LLDB aliases/regexes and Python scripts to aid in your debugging sessions】
  7. 【迅为iMX6Q】开发板烧写Uboot后串口无任何输出的问题解决
  8. linux内核漏洞分类,blog/linux kernel double-free类型漏洞的利用.md at master · snorez/blog · GitHub...
  9. 可在线使用的调色板颜料工具
  10. Qt学习:QtCharts绘制动态曲线,实时更新数据与坐标轴