Django 入门例子2

前言

上次写了第一个入门的小例子,今天呢,咋们来搭建一个博客网站,所以今天会学到django中的model,以及template模板。
上一篇地址

代码

  1. 首先, 我们在之前的根目录mysite/下面新建一个app,起名叫blog:

    python manage.py startapp blog
    一个项目是可以有很多个APP的哟

  2. 接下来我们创建一个实体类,首先进入blog/models.py,在底部加入如下代码:

    class Blog(models.Model): #继承自models.Model
        title = models.CharField(max_length=20) #博客的标题 最大长度设置为20个字符
        body = models.TextField() #博客的内容
        timestamp = models.DateTimeField() #发表博客的日期及时间
    

    这就是我们的博客实体模型了,就是Java中的bean对象。到时候我们可以通过这个类对数据库进行访问,而不需要写SQL语句!!!我们这里使用的数据库是默认的sqlite3,可以在mysite/settings.py中看到。因为这个是python自带的数据库,所以不需要额外安装。

  3. 接下来进入mysite/settings.py,找到INSTALLED_APPS,加入'blog',结果如下所示

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog',#也就是我们刚刚创建的blog文件夹,我们的blog是一个APP哟
    ]
    

    把blog加入到上面之后,django就知道要包含blog这个APP了,之后就可以通过Blog对象建表了。

  4. 让django帮我们自动生成Blog对应的表!

    在根目录执行python manage.py makemigrations,这句话是告诉django,你对models做了一些改变,在这里,我们是增加了一个Blog类。

    然后输入python manage.py migrate,完成建表。

    通过输出的信息你会发现建立了很多表,因为上面有很多APP,里面有各种表哟。我们的只是其中一个罢了。

    Applying blog.0001_initial... OK 这句话就是建立我们的表啦~

  5. 创建一个后台管理员,管理我们的各种models,这里也就是管理我们的Blog表。

    执行:python manage.py createsuperuser,然后按照提示输入你要注册的用户名,邮箱以及设置密码就可以了。

  6. 将我们的Blog注册到管理员,让管理员能够访问到。

    打开blog/admin.py,加入下面几行代码:

    from .models import Blog #从当前目录的models.py中导入Blog类
    
    # Register your models here.
    admin.site.register(Blog)
    

    这样我们就可以在后台访问到Blog了

  7. 启动服务 python manage.py runserver

  8. 浏览器输入: localhost:8000/admin

    然后输入你刚刚注册的用户名和密码,接下来你就可以看到如下画面啦


    管理员界面

    上面的Blog就是我们刚刚注册的哟,我们点击add,然后在页面中输入我们的内容:


    输入内容

    然后点击SAVE即可保存到数据库。

    所以以后你可以很方便的管理你的数据库中的表,只需要调用admin.site.register()方法就可以在后台查看到你的表了。

  9. 接下来,我们在blog/文件夹下面新建一个目录,叫templates,用来存放html文件。

    这时候,我们的文件目录应该是这样的:


    目录结构
  10. 在网页中展示我们的Blog:

    首先我们要在blog/templates目录下新建一个blog_list.html文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>My Blog</title>
    </head>
    <body>
    
        {% for blog in blog_list %}
            <div>
            <h1>{{ blog.title }}</h1>
            <p>{{ blog.body }}</p>
            <span>{{ blog.timestamp|date:'Y-M-D' }}</span>
            </div>
        {% endfor %}
    
    </body>
    </html>
    

    上面的网页在django中是称作模板,在里面可以写很多动态的元素,由django渲染后生成html,例如 {% for blog in blogList %} {% endfor %}是一个迭代器,中间的元素会被迭代很多次,所以可以动态生成html标签。{{ blog.title }}这个是取blog的title属性的值。

  11. 我们要在views.py中取出数据库中的Blog对象,然后交给这个html:

    打开blog/views.py,加入如下代码:

    from .models import Blog #导入Blog类
    
    # Create your views here.
    def blog_list(request): #方法不能漏掉一个参数
        blog_list = Blog.objects.all()#获取数据库中Blog的所有对象
        return render(request, 'blog_list.html', {'blog_list': blog_list}, )#把数据交给blog_list.html进行渲染
    

render()的第一个参数是request,第二个是html模板,第三个是字典,也就是我们要传递到html的参数,html访问的是字典的key。所以你现在可以回过头看看我们上面编写的html了!

  1. 最后让浏览器能够找到我们的页面,在mysite/urls.py中进行配置:

    from django.conf.urls import include, url
    from django.contrib import admin
    from blog.views import blog_list #增加这行  导入blog_list方法
    urlpatterns = [
        url(r'^polls/', include('polls.urls')),
        url(r'^admin/', admin.site.urls),
        url(r'^blog/',blog_list)#增加这行 用blog_list方法渲染
    ]
    

相信大家看过上一篇的对上面的代码应该不陌生了。

  1. 启动服务进行访问:

    浏览器输入:http://localhost:8000/blog/

    就可以看到刚刚用admin增加的Blog对象了!!!


    效果图

后记

这篇文章只是走马观花的过一遍流程而已,让我们再理清一下思路:

  1. 新建了一个app,要在mysite/settings.py中进行注册
  2. 实体模型写在models.py中,一个实体类就对应了数据库的一张表。
  3. 在views.py中我们可以通过实体类对数据库进行访问,不需要写SQL语句。常用的获取对象的方法我们下一篇再讲
  4. views.py获取的对象可以通过字典的形式传到template中,然后通过模板语言进行访问,动态生成html
  5. 通过配置mysite/urls.py,将URL链接与方法绑定起来。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容