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>


原创粉丝点击