Django——相关知识(二)
来源:互联网 发布:中国科学院大学知乎 编辑:程序博客网 时间:2024/06/07 17:10
学习链接:http://www.runoob.com/django/django-template.html
0、使用 django-admin.py 来创建 HelloWorld 项目
django-admin startproject HelloWorld
目录说明:
- HelloWorld: 项目的容器。
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
- HelloWorld/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- HelloWorld/settings.py: 该 Django 项目的设置/配置。
- HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
- HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
1、HttpResponse
对于HttpRequest 对象来说,是由Django自动创建, 但是,HttpResponse对象就必须我们自己创建。每个View方法必须返回一个HttpResponse对象。
HttpResponse类在django.http.HttpResponse。
构造HttpResponses
一般地, 你可以通过给HttpResponse的构造函数传递字符串表示的页面内容来构造HttpResponse对象
2、url.py中 的代码的意思:
“^”匹配字符串首部的子串;
“$”匹配结束部分的子串;
“\b”用于分隔单词;
from django.conf.urls import *from . import view,testdb'''r'^$'正则表达式,只有开始和结尾间隔符号,中间没有要匹配的字符串,则打开网页输入服务器IP:port号(网页要呈现的视图是view模块的hello方法的功能)后不应该再有别的字符串出现了。'''urlpatterns = [ url(r'^hello$', view.hello), url(r'^testdb$', testdb.testdb),]
3、Django模型:http://www.runoob.com/django/django-model.html
安装MySQL-------->安装MySQL驱动(mysqlclient)------------>settings.py配置DB-------------->定义模型,创建app--------------->修改新建的APP中的models.py
文件------------->settings.py中改INSTALLED_APPS项------------->命令之创建表结构------------->数据库操作,添加testdb.py中------------>修改urls.py文件---------
->开启Django服务器runserver-------------->网页上输入 服务器IP:端口号/urls(匹配的正则表达式中的字符串)
注:安装完MySQL后,要打开command line client命令终端,输入安装MySQL时的密码,登录上MySQL;
4、Django模板:模板是一个文本,用于分离文档的表现形式和内容。
在一个项目中建立templates目录------------>在templates中建立 HTML(hello.html文件)------->向Django说明模板路径,修改settings.py中
TEMPLATES字段的DIRS-------->修改view.py增加一个新对象用于向模板提交数据--------->开启Django服务器runserver-------------->网页上输入 服务
器IP:端口号/urls(匹配的正则表达式中的字符串)
5、Django模板继承:
在一个项目中建立templates目录------------>在templates中建立 HTML(base.html文件)
base.html代码如下:
<!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body> <h1>Hello World!</h1> <p>菜鸟教程 Django 测试。</p> {% block mainbody %} <p>original</p> {% endblock %}</body></html>
以上代码中,名为 mainbody 的 block 标签是可以被继承者们替换掉的部分。
所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。
templates中新建hello.html 中继承 base.html,并替换特定 block,hello.html 代码如下:{% extends "base.html" %} {% block mainbody %}<p>继承了 base.html 文件</p>{% endblock %}
第一行代码说明 hello.html 继承了 base.html 文件。可以看到,这里相同名字的 block 标签用以替换 base.html 的相应 block。
--------->向Django说明模板路径,修改settings.py中TEMPLATES字段的DIRS-------->修改view.py增加一个新对象用于向模板提交数据--------->开启
Django服务器runserver-------------->网页上输入 服务器IP:端口号/urls(匹配的正则表达式中的字符串)
6、Django的数据库操作:testdb.py中的代码
# -*- coding: utf-8 -*- from django.http import HttpResponse from TestModel.models import Test # 数据库操作def testdb(request): # 初始化 response = "" response1 = "" '''添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:''' test1 = Test(name='huanhuan')#Test是表(属性名=属性值) test1.save() # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM list = Test.objects.all(); # filter相当于SQL中的WHERE,可设置条件过滤结果,返回的是元组,即记录。 response2 = Test.objects.filter(id=2) # 获取单个对象 response3 = Test.objects.get(id=1) #return HttpResponse("<p>" + str(response3)+ "</p>");返回的是Test object # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE test1 = Test.objects.get(id=1)#但是str(test1)是Test object,是什么意思 test1.name = 'Google' test1.save() # 另外一种方式 Test.objects.filter(id=32).update(name='yoyo') # 删除id=1的数据 test1 = Test.objects.get(id=37) test1.delete() # 另外一种方式 #Test.objects.filter(name="dadada").delete()#删除所有name="dadada"的记录 #Test.objects.filter(id=24).delete()#删除所有name="dadada"的记录 #Test.objects.filter(name="huanhuan").delete()#删除所有name="dadada"的记录 #数据排序(没试验) Test.objects.order_by("name") # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;(没试验) Test.objects.order_by('name')[0:2] # 上面的方法可以连锁使用(没试验) Test.objects.filter(name="runoob").order_by("id") # 输出所有数据 for var in list: response1 += var.name + " "#访问记录的某字段; response = response1 return HttpResponse("<p>" + response+ "</p>");
7、Django表单
8、数据库中外键的知识:
9、【python】【django】migrate 和makemigrations的差别
参考:http://blog.csdn.net/yang1z1/article/details/52235424
django 1.9之后
python manage.py syncdb改为:
Python manger.py makemigrations
Python manage.py migrate
在你改动了 model.py的内容之后执行下面的命令:
Python manger.py makemigrations
相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件
你可以手动打开这个文件,看看里面是什么
在此之后执行命令
python manager.py migrate
将该改动作用到数据库文件,比如产生table之类
当makemigrations之后产生了0001_initial.py 文件,你可以查看下该migrations会对应于什么样子的SQL命令
python manger.py sqlmigrate theapp 0001
大概是这个样子的:
BEGIN;CREATE TABLE "polls_choice" ( "id" serial NOT NULL PRIMARY KEY, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL);CREATE TABLE "polls_question" ( "id" serial NOT NULL PRIMARY KEY, "question_text" varchar(200) NOT NULL, "pub_date" timestamp with time zone NOT NULL);ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL;ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT;CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");ALTER TABLE "polls_choice" ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id" FOREIGN KEY ("question_id") REFERENCES "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED;COMMIT;
10、Python中的import和from import
参考:http://dacoolbaby.iteye.com/blog/1873951
10.1、Python路径介绍
在python用import或者from...import来导入相应的模块。
模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中,我们就可以使用了。
这类似于C语言中的include头文件,Python中我们用import导入我们需要的模块。
10.2、搜索路径
Python会在以下路径中搜索它想要寻找的模块:
1. 程序所在的文件夹
2. 标准库的安装路径
3. 操作系统环境变量PYTHONPATH所包含的路径
python代码:
import sys print('================Python import mode=========================='); print ('The command line arguments are:') for i in sys.argv: print (i) print ('\n The python path',sys.path) from sys import argv,path # 导入特定的成员 print('================python from import===================================') print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path 如果你要使用所有sys模块使用的名字,你可以这样: from sys import * print('path:',path)
10.3、Python项目结构
所以在Python项目里面的区分,按照如下规定进行:
1.严格区分包和文件夹。包的定义就是包含__init__.py的文件夹。
如果没有__init__.py,那么就是普通的文件夹。
2.导入package。
在python 安装目录的site-package文件夹中新建xxx.pth,内容是需要导入的package所在的文件夹路径。
3.导入模块。
就是一般的模块导入写法,注意只要包路径,不要文件夹路径。
以上面工程为例,
总共有4个包,分别是:package,package1, package2, folder2.(注意,folder1不是package,因为它没有__init__.py)。
这些包所在的文件夹共有两个,test以及test/folder1。 注意,package2所在的文件夹是test,虽然它是包含在folder2里面,但是folder2是一个包,不是一个文件夹。
因此在site-package中新建一个XXX.pth, 里面添加上test以及test/folder1的绝对路径即可。
模块导入比较简单,只要依次填包名就可以了,但注意只要包名
如果需要导入module2,则import folder2.package2.module2
如果需要导入module1,则import package1.module1 注意,路径中没有folder1,因为folder1是文件夹,不是包。
11、GET和POST的区别(在URL上):
GET:
POST:
12、render和render_to_response方法区别:
render:http://blog.csdn.net/songyu0219/article/details/52900470?_t_t_t=0.9311686654109508
from django.shortcuts import render
help文档中描述如下:
render(request, template_name, context=None, content_type=None, status=None, using=None)
Returns a HttpResponse whose content is filled with the result of calling django.template.loader.render_to_string() with the passed arguments.
此方法的作用---结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
通俗的讲就是把context的内容, 加载进templates中定义的文件, 并通过浏览器渲染呈现.
参数讲解:
request: 是一个固定参数, 没什么好讲的。
template_name: templates 中定义的文件, 要注意路径名. 比如'templates\polls\index.html', 参数就要写‘polls\index.html’
context: 要传入文件中用于渲染呈现的数据, 默认是字典格式
content_type: 生成的文档要使用的MIME 类型。默认为DEFAULT_CONTENT_TYPE 设置的值。
status: http的响应代码,默认是200.
using: 用于加载模板使用的模板引擎的名称。
常见的MIME类型(通用型):
超文本标记语言文本 .html text/htmlxml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream
举例
from django.shortcuts import render def my_view(request): # View code here... return render(request, 'myapp/index.html', { 'foo': 'bar', }, content_type='application/xhtml+xml')
- Django——相关知识(二)
- Django——相关知识(一)
- Django------相关知识(三)
- 线程 相关知识(二)
- dubbo相关知识(二)
- MFC相关知识(二)
- IPU相关知识(二)
- VOLTE学习笔记(二)——IMS相关标识及SIP知识
- Django——Url相关
- 生产排程相关知识(二)
- 计算机编码的相关知识(二)
- 4G网络相关知识(二)
- Iphone相关知识二
- 二、了解web相关知识
- 操作系统—进程相关知识
- 数据结构算法新解(二)————表 以及相关知识(一)
- 知识积累(二)——native2ascii
- 多进程编程的相关知识总结(二)
- 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)
- 面试题29—数组中出现次数超过一半的数字
- android编程之代码布局(三)
- 使用shell重启tomcat
- APP开发流程
- Django——相关知识(二)
- 利用SecureCRT上传、下载文件(使用sz与rz命令)
- Java中判断字符串是否为数字的五种方法
- ROS运行python脚本报错: No module named srv
- apicloud安卓系统下载并安装APK
- 项目中的小问题
- mac常用快捷键
- [JAVA]定时任务之-Quartz使用篇
- Android 自定义View控件画圆