django框架
2017-05-23 09:13
155 查看
1. 创建一个项目及App,并将App加入到setting配置中
2. views编写每个页面要展现的代码
3. 配置url,在urls中配置url要展现的哪个views的代码。若url太多,根目录太多。则可以在app中创建一个urls,此处编写此app要展现的url,在项目中总的url中用inclue引用
4.开发一个Template:
步骤:
在APP的根目录下创建名叫Templates的目录
在该目录下创建HTML文件
在view.py中返回render()
DTL:是jango模板语言
DTL初步使用:
render()函数中支持一个dict类型参数
该字典是后台传递到模板的参数,键为参数名: eg: returnrender(request,'index.html',{'hello':'hello,
Blog!'})
在模板中使用{{参数名}}来直接使用:<h1>{{hello}}</h1>
#用的是render中的键名
查看页面:http://127.0.0.1:8000/blog/,返回页面的是传过来的参数:hello,Blog!
注意事项:
Django查找Template:
Django是按照INSTALLED_APPS中添加的顺序查找Templates
不同APP下Templates目录中的同名.html文件会造成冲突
解决方法:
在APP的Templates目录下创建以APP名为名称的目录
将html文件放入新创建的目录下
eg: 1.python manage.py startapp blog2 在同一个project下创建一个blog的App
2. 将app加入到setting中
3. 将blog中的templates文件夹拷入blog2中,修改一下html中的返回值,返回hello,blog2!
4.将blog中的urls也拷入到blog2,并修改导入的文件:importblog2.viewsasbv
5.修改每个blog中的view文件,分别返回到页面中的内容为相应的templates下的App名下的html:returnrender(request,'blog2/index.html')
6.修改myblog根urls:将页面展现的url加上
url(r'^blog/',include('blog.urls')),
#blog应用下的urls配置下的url:importblog.viewsasbv及 urlpattern[url(r'^index/$',bv.index),]
5.model与数据库的交互
Django中的Models:
一个Model对应数据库的一张数据表
Django中的Models 以类的形式表现
它包含了一些基本字段以及数据的一些行为
ORM:对象关系映射(object Relation Mapping)
实现了对象和数据库之间的映射
隐藏了数据访问的细节,不需要编写SQL语句
步骤:
1.在应用根目录下创建models.py,并引入models模块。这一文件django已经帮我们创建好了
2.创建类,继承models.Model,该类即是一张数据表
3.创建数据库的字段,字段即类里面的属性(变量),在setting中设置用哪个数据库
attr=models.CharField(max_length=64)
https://docs.djangoproject.com/en/1.10/ref/models/fields
eg: models.py中创建数据库中的数据表,django中创建数据库中的表都在此文件中,创建一个个对象
在myblog下面的setting中设置用哪个数据库:
生成数据表
步骤:
1.命令行中执行mange.py同级目录
2.执行python manage.py makemigrations app名(可选)若不写app名则表示所有的app中都迁移了此数据,进行数据迁移。
3.命令执行python manage.py migrate
查看:
1.Django会自动在app/migrations/目录下生成移植文件
2.执行python manage.py sqlmigrate 应用名 文件id 查看sql语句
页面呈现数据
后台步骤:
1.views.py中import models,及写处理各个页面的函数
2.article=models.Article.objects.get(pk=1),get取主键=1的数据;相当于数据库中的select 取id=1的Sql语句
3.用render将数据返回到页面,render(request,page,{'article':article})
前端步骤:
模板可直接使用对象以及对象的“.”操作,因为在views.py中已经取出数据库的值pk=1作为article对象,故只要取对象article.title即可以取到数据库的title值
{{article.title}}
6.Admin
Admin:
Admin是Django自带的一个功能强大的自动化数据管理界面
被授权的用户可直接在Admin中管理数据库
Djiang提供了许多什对Admin的定制功能
配置Admin:
1.创建超级用户:python manage.py createsuperuser
2.Admin 入口:localhost:8000/admin
3.Adimin界面显示为中文,则修改settings.py中LANGUAGE_CODE='zh_Hans'
配置应用:
1.在应用下admin.py中引入自身的models模块(或里面的模型类)
2.编辑admin.py: admin.site.register(models.Article)
修改数据默认显示名称:
步骤:
1.在Article类下添加一个方法,即models的类Article
2. 根据Python版本选择__str__(self)或__unicode_(self)
3. return self.title
7.博客主页面
列表编写思路:
1.取出数据库中所有文章对象
2.将文章对象们打包成列表,传递到前端
3.前端页面把文章以标题超链接的形式逐个列出
模板For循环:与之前用的直接传参的数据是不一样的。直接传参是{{}}
{% for xx in xxs %}
HTML语句
{% endfor %}
eg: 后台代码
blog中的views.py中
articles=Article.objects.all() #获取全部的文章,这里返回的就是列表
return render(request, 'blog/index.html',{'article':articles}) #将获得的articls列表返回给前端
前端代码:在index.html中
博客主页面
列表编写思路:
1.取出数据库中所有文章对象
2.将文章对象们打包成列表,传递到前端
3.前端页面把文章以标题超链接的形式逐个列出
模板For循环:与之前用的直接传参的数据是不一样的。直接传参是{{}}
{% for xx in xxs %}
HTML语句
{% endfor %}
eg: 后台代码
blog中的views.py中
articles=Article.objects.all() #获取全部的文章,这里返回的就是列表
return render(request, 'blog/index.html',{'article':articles}) #将获得的articls列表返回给前端
前端代码:在index.html中
#下面h1为新文单入口
<h1>
<a href="">新文章</a>
</h1>
#下面是从后台获取的articles列表,用for循环取出显示在前端 ,前端用aritcle.title展示
{% for article in articles %}
<a href="">{{article.title}}</a>
<br/>
{% endfor %}
8.博客文章页面
页面内容:放在template的html中
标题
文章内容
修改文章按钮(超链接)
URL传递参数:
参数写在响应函数中request后,可以有默认值
URL正则表达式:r'^/article/(?P<article_id>[0-9]+)/$'
URL正则中的组名(article_id)必须和响应函数中的参数名一致(即views中的def 的函数)
views中的响应函数
defarticle_page(request,article_id):
9.博客文章页面中的超链接
超链接目标地址:
href后面是目标地址
template中可以用“{% url 'app_name:url_name' param %}”,app_name:是指的应用名称的命名空间,url_name是url的名称,param是地址参数,例如article_id
其中app_name和url_name都在url中配置
再配URL:以下是两种方法
url函数的名称参数:
(1)根urls,写在include()的第二个参数位置,namespace='blog'
(2)应用下则写在url()的第三个参数位置,name='article'
上面两种写法的区别在于:主要取决于是否使用include引用了另一个url配置文件。即如果使用了include那则用上面的名字空间,若没使用include则直接作用第二种方法,直接用name.
eg:
(1)在myblog的根目录下找到根Url.py文件,加上namespace
2. views编写每个页面要展现的代码
3. 配置url,在urls中配置url要展现的哪个views的代码。若url太多,根目录太多。则可以在app中创建一个urls,此处编写此app要展现的url,在项目中总的url中用inclue引用
4.开发一个Template:
步骤:
在APP的根目录下创建名叫Templates的目录
在该目录下创建HTML文件
在view.py中返回render()
DTL:是jango模板语言
DTL初步使用:
render()函数中支持一个dict类型参数
该字典是后台传递到模板的参数,键为参数名: eg: returnrender(request,'index.html',{'hello':'hello,
Blog!'})
在模板中使用{{参数名}}来直接使用:<h1>{{hello}}</h1>
#用的是render中的键名
查看页面:http://127.0.0.1:8000/blog/,返回页面的是传过来的参数:hello,Blog!
注意事项:
Django查找Template:
Django是按照INSTALLED_APPS中添加的顺序查找Templates
不同APP下Templates目录中的同名.html文件会造成冲突
解决方法:
在APP的Templates目录下创建以APP名为名称的目录
将html文件放入新创建的目录下
eg: 1.python manage.py startapp blog2 在同一个project下创建一个blog的App
2. 将app加入到setting中
3. 将blog中的templates文件夹拷入blog2中,修改一下html中的返回值,返回hello,blog2!
4.将blog中的urls也拷入到blog2,并修改导入的文件:importblog2.viewsasbv
5.修改每个blog中的view文件,分别返回到页面中的内容为相应的templates下的App名下的html:returnrender(request,'blog2/index.html')
6.修改myblog根urls:将页面展现的url加上
url(r'^blog/',include('blog.urls')),
#blog应用下的urls配置下的url:importblog.viewsasbv及 urlpattern[url(r'^index/$',bv.index),]
url(r'^blog2/', include('blog2.urls')),
5.model与数据库的交互
Django中的Models:
一个Model对应数据库的一张数据表
Django中的Models 以类的形式表现
它包含了一些基本字段以及数据的一些行为
ORM:对象关系映射(object Relation Mapping)
实现了对象和数据库之间的映射
隐藏了数据访问的细节,不需要编写SQL语句
步骤:
1.在应用根目录下创建models.py,并引入models模块。这一文件django已经帮我们创建好了
2.创建类,继承models.Model,该类即是一张数据表
3.创建数据库的字段,字段即类里面的属性(变量),在setting中设置用哪个数据库
attr=models.CharField(max_length=64)
https://docs.djangoproject.com/en/1.10/ref/models/fields
eg: models.py中创建数据库中的数据表,django中创建数据库中的表都在此文件中,创建一个个对象
from __future__ import unicode_literals from django.db import models # Create your models here. class Article(models.Model): title=models.CharField(max_length=32,default="Title") content=models.TextField(null=True) def __unicode__(self): return self.title
在myblog下面的setting中设置用哪个数据库:
#配置mysql数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'localtest', 'USER':'root', 'PASSWORD':'root', 'HOST':'127.0.0.1', 'PORT':3306, } }
生成数据表
步骤:
1.命令行中执行mange.py同级目录
2.执行python manage.py makemigrations app名(可选)若不写app名则表示所有的app中都迁移了此数据,进行数据迁移。
3.命令执行python manage.py migrate
查看:
1.Django会自动在app/migrations/目录下生成移植文件
2.执行python manage.py sqlmigrate 应用名 文件id 查看sql语句
页面呈现数据
后台步骤:
1.views.py中import models,及写处理各个页面的函数
2.article=models.Article.objects.get(pk=1),get取主键=1的数据;相当于数据库中的select 取id=1的Sql语句
3.用render将数据返回到页面,render(request,page,{'article':article})
前端步骤:
模板可直接使用对象以及对象的“.”操作,因为在views.py中已经取出数据库的值pk=1作为article对象,故只要取对象article.title即可以取到数据库的title值
{{article.title}}
6.Admin
Admin:
Admin是Django自带的一个功能强大的自动化数据管理界面
被授权的用户可直接在Admin中管理数据库
Djiang提供了许多什对Admin的定制功能
配置Admin:
1.创建超级用户:python manage.py createsuperuser
2.Admin 入口:localhost:8000/admin
3.Adimin界面显示为中文,则修改settings.py中LANGUAGE_CODE='zh_Hans'
配置应用:
1.在应用下admin.py中引入自身的models模块(或里面的模型类)
2.编辑admin.py: admin.site.register(models.Article)
修改数据默认显示名称:
步骤:
1.在Article类下添加一个方法,即models的类Article
2. 根据Python版本选择__str__(self)或__unicode_(self)
3. return self.title
7.博客主页面
列表编写思路:
1.取出数据库中所有文章对象
2.将文章对象们打包成列表,传递到前端
3.前端页面把文章以标题超链接的形式逐个列出
模板For循环:与之前用的直接传参的数据是不一样的。直接传参是{{}}
{% for xx in xxs %}
HTML语句
{% endfor %}
eg: 后台代码
blog中的views.py中
articles=Article.objects.all() #获取全部的文章,这里返回的就是列表
return render(request, 'blog/index.html',{'article':articles}) #将获得的articls列表返回给前端
前端代码:在index.html中
博客主页面
列表编写思路:
1.取出数据库中所有文章对象
2.将文章对象们打包成列表,传递到前端
3.前端页面把文章以标题超链接的形式逐个列出
模板For循环:与之前用的直接传参的数据是不一样的。直接传参是{{}}
{% for xx in xxs %}
HTML语句
{% endfor %}
eg: 后台代码
blog中的views.py中
articles=Article.objects.all() #获取全部的文章,这里返回的就是列表
return render(request, 'blog/index.html',{'article':articles}) #将获得的articls列表返回给前端
前端代码:在index.html中
#下面h1为新文单入口
<h1>
<a href="">新文章</a>
</h1>
#下面是从后台获取的articles列表,用for循环取出显示在前端 ,前端用aritcle.title展示
{% for article in articles %}
<a href="">{{article.title}}</a>
<br/>
{% endfor %}
8.博客文章页面
页面内容:放在template的html中
标题
文章内容
修改文章按钮(超链接)
URL传递参数:
参数写在响应函数中request后,可以有默认值
URL正则表达式:r'^/article/(?P<article_id>[0-9]+)/$'
URL正则中的组名(article_id)必须和响应函数中的参数名一致(即views中的def 的函数)
article_page.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Article Page</title> </head> <body> <h1>{{article.title}}</h1>> <br/> <h3>{{article.content}}</h3> <br/><br/> <a href="">修改文章</a> </body> </html>
views中的响应函数
defarticle_page(request,article_id):
article=Article.objects.get(pk=article_id) #返回模板,模板中传入参数'article':article,后面传入的是刚上面的article对象 return render(request,'blog/article_page.html',{'article':article})
urls.py中配置带参数的url
urlpatterns = [ url(r'^$',views.index), #约束空字符串 url(r'^index/$',views.index), #未加/就会匹配不成功,自己写url时一定要记得加上/ #因为views中article_page函数中多了一个参article_id,故要将参数显示在url中,例如/article/1,故要用正则表达式来匹配 #下面的组名article_id必须与views中的响应函数article_page中的参数一致,要不会会报错 url(r'^article/(?P<article_id>[0-9]+)$', views.article_page), ]
9.博客文章页面中的超链接
超链接目标地址:
href后面是目标地址
template中可以用“{% url 'app_name:url_name' param %}”,app_name:是指的应用名称的命名空间,url_name是url的名称,param是地址参数,例如article_id
其中app_name和url_name都在url中配置
再配URL:以下是两种方法
url函数的名称参数:
(1)根urls,写在include()的第二个参数位置,namespace='blog'
(2)应用下则写在url()的第三个参数位置,name='article'
上面两种写法的区别在于:主要取决于是否使用include引用了另一个url配置文件。即如果使用了include那则用上面的名字空间,若没使用include则直接作用第二种方法,直接用name.
eg:
(1)在myblog的根目录下找到根Url.py文件,加上namespace
from django.conf.urls import url,include from django.contrib import admin import blog.views as bv urlpatterns = [ url(r'^admin/', admin.site.urls), # url(r'^index/',bv.index), #配置url,含有include,则在此第二个参数上加上namespace url(r'^blog/',include('blog.urls',namespace='blog')), url(r'^blog2/', include('blog2.urls')), ]
(2)在应用blog的url.py文件下,加上name
eg:
from django.conf.urls import url,include from .import views # import blog.views as bv urlpatterns = [ url(r'^$',views.index), #约束空字符串 url(r'^index/$',views.index), #未加/就会匹配不成功,自己写url时一定要记得加上/ #因为views中article_page函数中多了一个参article_id,故要将参数显示在url中,例如/article/1,故要用正则表达式来匹配 #下面的组名article_id必须与views中的响应函数article_page中的参数一致,要不会会报错 #在应用的url配置中加上name和参数配置url url(r'^article/(?P<article_id>[0-9]+)$', views.article_page,name='article_page'), ](3)最后修改template中的index.html中配置href,让主页中的文章链接指向blog:article_page(blog是前面根Urls.py中配置的namespace,article_page
是应用中的url中配置的name='article_page'),并以article_id传递到相应的页面。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1> <a href="">新文章</a> </h1> {% for article in articles %} <a href="{% url 'blog:article_page' article.id %}">{{article.title}}</a> #此处article已经是对象了,所以可直接用article.id <br/> {% endfor %} </body> </html>
相关文章推荐
- 详解Django框架中的视图级缓存
- Python之Django框架入门(一)
- 详解Django框架中用户的登录和退出的实现
- (9)Django框架学习-Templates进阶用法--上
- 玩聚网目前也是基于Python的Django框架开发
- 在Django框架中建立新的站点
- django学习记录-- 添加haystack搜索框架时报错:AttributeError: 'BlogIndex' object has no attribute 'fields'
- django框架从零开始_002_helloworld
- 用Scrapy与Django一起搭建一个简单的爬虫框架
- windows下Django框架的搭建及测试教程
- Django框架models使用group by的方法
- 电商网站(Django框架)—— 思维导图
- 关于在django框架里取已登录用户名字的问题
- [Link]选择一个 Python Web 框架:Django vs Flask vs Pyramid
- Python开发【第二十一篇】:Web框架之Django【基础】
- 玩聚网目前也是基于Python的Django框架开发
- 都说Djnago框架重,那就让哥用15行代码写个django web程序!
- Django 框架之 HelloWord
- python Django框架学习
- django框架从零开始_010_自动化测试