您的位置:首页 > 编程语言 > Go语言

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),]

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: