django框架
来源:互联网 发布:程序员年薪百万要多久 编辑:程序博客网 时间:2024/05/16 00:53
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),]
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_literalsfrom 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,includefrom django.contrib import adminimport blog.views as bvurlpatterns = [ 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,includefrom .import views# import blog.views as bvurlpatterns = [ 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 - Django框架 简介
- django框架
- Django框架
- django框架
- Django框架
- django框架
- django 缓存框架
- Django 缓存框架
- Django 缓存框架
- 深入Django 缓存框架
- Django Message框架尝鲜
- Django REST框架实现
- django框架简介
- django框架功能
- django前台开发框架
- Django 网页框架
- python模拟Django框架
- Python之Django框架
- 《lua程序设计》读书笔记 第三章:表达式
- Python 字典类型及相关操作
- 仿射变换
- 十条常用nmap命令行格式
- 引用
- django框架
- CNN、DNN、RNN 内部网络结构区别
- Mac下使用Octopress搭建博客详细教程-芒果iOS
- 随笔2
- 2017全国大学生软件测试大赛,火热开赛
- Reverse Nodes in k-Group
- 操作系统短进程优先算法
- ADB shell的dumpsys命令-查看android组件信息详解
- php获取天气