Django学习笔记--第一天--搭建一个简易博客

来源:互联网 发布:淘宝商家热线 编辑:程序博客网 时间:2024/06/11 18:44

前言:最近准备写一个自己的个人博客。本来想用.net开发的,由于VS有点装不上,最近学习Python。选择了python的web框架Django。
开发环境:Ubuntu 14.04
开发工具:Pychram 2016.1.0 社区版
Python版本:2.7.6
Django版本:1.9.6
<参考资料>—前人文章:http://my.oschina.net/jastme/blog/345265
下面开始:
1.工具安装:
python已经自带;打开Pychram
File–>settings–>Project **–>Project Interpreter
点击绿色的+号,搜索Django –>选择 Install Package即可安装完成.
这里写图片描述

输入:import django
验证是否安装成功。如果没有报错,表示成功。
这里写图片描述

2.创建工程
PS:路径最好不要包含中文,否则会报错
打开终端输入:

django-admin.py startproject mysitecd mysitepython manage.py startapp blog
django-admin.py startproject mysite

新建了许多工程文件:

  • manage.py —– Django项目里面的工具,通过它可以调用django shell和数据库等。

  • settings.py —- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。

  • urls.py —– 负责把URL模式映射到应用程序。

 python manage.py startapp blog

创建了Blog应用
用Pychram打开工程:可以看到下面的文件结构:
这里写图片描述

然后在/mysite/mysite/settings.py里面的

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',]

添加’blog’,

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'blog',]

表示添加一个blog app

3.数据库创建
django使用代码的方式创建数据库。
首先修改mysite/blog/models.py 继承默认的数据库类,创建数据库

from __future__ import unicode_literalsfrom django.db import models# Create your models here.class BlogPost(models.Model):    title = models.CharField(max_length = 150)    body = models.TextField()    timestamp = models.DateTimeField()

BlogPost类是django.db.models.Model的一个子类 。它有变量title(blog的标题),body(blog的内容部分),timestamp(blog的发表时间)

这里只是设计了数据库,并没有创建数据库。
Dajango支持主流的数据库服务器(MySQL,PostgreSQL,Oracle和MSSQL),但本项目使用SQLite,这里之需要通过一条简单的命令可以创建SQLite数据库。需要修改在settings里面,默认为sqlite3

DATABASES = {    'default': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    }

创建数据库:
切换到含有manage.py的目录下:

python manage.py makemigrations python manage.py migrate

这里写图片描述

4.后台管理
django默认开启了admin的后台:

urlpatterns = [    url(r'^admin/', admin.site.urls),]

终端输入:python manage.py runserver开启服务(再价一个参数可以设置端口号)
访问 http://127.0.0.1:8000/admin 访问后台
这里写图片描述
需要管理员密码账号:
终端输入:

python manage.py createsuperuser

根据提示创建即可。
五.修改数据库内容,添加其他项。
在最后添加一行代码:

admin.site.register(BlogPost)

前面添加:

from django.contrib import admin

这样就多了一个BlogPost的项了
这里写图片描述
Add–>添加文章,就能开始写文章了。

然后再对后台界面做个优化,让文章的标题时间显示出来‘
修改blog应用的models.py,为它添加一个admin.ModelAdmin的子类BlogPostAdmin.以列表形式显示BlogPost的标题和时间。
完整代码

from django.db import modelsfrom django.contrib import admin# Create your models here.class BlogPost(models.Model):    title = models.CharField(max_length = 150)    body = models.TextField()    timestamp = models.DateTimeField()class BlogPostAdmin(admin.ModelAdmin):    list_display = ('title','timestamp')admin.site.register(BlogPost,BlogPostAdmin)

六.把后台博客优雅的显示到前台去
blog下面新建一个templates文件夹,这里可以放置各种资源,会默认找到这里。
在templates下新建一个模板页面。
muban.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>我的博客</title></head><body>{% for post in posts %}<h2>{{ post.title }}</h2><p>{{ post.timestamp }}</p><p>{{ post.body }}</p>{% endfor%}</body></html>

其中{{ }}里面包含的是要显示的变量,使用一个for循环把文章全部显示在页面上。

视图blog/views里面包含要显示的页面方式。
在这里调用模板并且传入参数:

from django.shortcuts import renderfrom django.template import loader,Contextfrom django.http import HttpResponsefrom blog.models import BlogPost# Create your views here.def muban(request):    posts = BlogPost.objects.all()    t = loader.get_template("muban.html")    c = Context({'posts':posts})    return HttpResponse(t.render(c))
  • posts = BlogPost.objects.all() :获取数据库里面所拥有BlogPost对象
  • t = loader.get_template(“archive.html”):加载模板
  • c = Context({‘posts’:posts}):模板的渲染的数据是有一个字典类的对象Context提供,这里的是一对键值对。

现在还是不能显示博客页面,因为请求首先是在mysite/urls里面处理的,
所以要添加一个url到blog的views里面去。

from django.conf.urls import urlfrom django.contrib import adminfrom blog import views as blog_views  # newurlpatterns = [    url(r'^blog', blog_views.muban, name='muban'),  # new    url(r'^admin/', admin.site.urls),]

打开服务,访问http://127.0.0.1:8000/blog/
这里写图片描述

七.美化界面
mysite/blog/templates目录里创建一个叫base.html的模板

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><style type="text/css">    body{color:#efd;background:#453;padding:0 5em;margin:0}    h1{padding:2em 1em;background:#675}    h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}    p{margin:1em 0}</style><body><h1>my blog</h1>    {% block content %}    {% endblock %}</body></html>

继承模板:
muban.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title></title></head><body>{% extends "base.html" %}  {% block content %}  {% for post in posts %}  <h2>{{  post.title }}</h2>  <p>{{ post.timestamp | date:"1,F jS"}}</p>  <p>{{ post.body }}</p>  {% endfor %}  {% endblock %}</body></html>

按日期排序

修改blog 应用下的models.py,为BlogPost添加一个Meta嵌套类。如下:

class BlogPost(models.Model):   title = models.CharField(max_length = 150)      body = models.TextField()      timestamp = models.DateTimeField()      class Meta:            ordering = ('-timestamp',)

刷新浏览器:
这里写图片描述

0 0
原创粉丝点击