Django入门之搭载博客

本篇内容是利用Python语言,在django模板下搭建一个小型博客,并能够通过admin页面进行添加。
头图


Django入门之搭建一个小型博客

安装输入代码
$ sudo pip install Django==1.10.1
安装成功后使用
$python
>>>import django
>>>print (django.get(version())
可打印当前django版本

创建项目
首先要规划好项目创建的位置,我的是在f:/python里面所以以后每次运行django执行项目都要在此文件夹下面。
进入文件cmd后输入命令f:/python/>django-admin startproject 项目名这样一个项目就创建好了,相当于一个Python包的地位。

再次进入你的项目中cmd,输入python manage.py runserver会得到一个网址

Starting development server at http://127.0.0.1.8000/
Quit the server with CONTROL-C

在浏览器中输入这串网址会得到一个it worked!的页面。至此一个django项目创建成功了。

创建应用
创建应用其实就在为刚刚创建的项目增加一些功能,进入到刚刚项目的文件夹中cmd输入
python manamg.py startapp blog(blog是新创建的应用名)就会在项目的文件夹中多一个以应用名命名的文件夹,但想要将这个应用能够正常使用,需要将这个项目名添加到项目的settings.py中
找到settings.py中

    INSTALLED_APP=[
    'django.contirb.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.session',
    'django.contrib.staticfiles',
    'blog',#应用名
   ]

这样就基本实现了项目和应用的关联。

建立数据模型类
django中不需要通过SQL语句才能和数据库打交道,用Python的的方式创建数据模型后,Django会自动完成数据库创作。
在blog/models.py中编写数据模型类Blog

    from django.db import models
    from django.untils import timezone
    from django.contrib.auth.models import User
    class BlogArticles(models.Model):
         title = models.CharField(max_length=300)
         author = models.ForeignKey(User,related_name="blog_post")#1
         body = models.DatetimeField(default=timezone.now )
         class Meta:
             ordering = ("-publish",) #2 
         def _unicode_(self): 
             return self.title

语句1 其实是通过字段author,使用ForrignKey()规定博客文章和用户之间的关系是一对多的关系,
而related_name=”blog_post”的作用是允许通过类User反向查询到BlogArticles
语句2 规定BlogArticles实例对象按publish字段倒序显示
这样一个博客的文章类模型就创建好了
使用python manage.py makemigrations语句让django自动生成数据库表,保存在blog/migrations/0001_initial.py
使用python manage.py migrate创建真正的数据库,保存在与项目同级文件夹中db.sqlite3中,打开数据库就可以自由添加。
到这里停一下,让我们回到0001_initial.py中,打开文件夹,会看到

    field=[
        ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
        ('title', models.CharField(max_length=300)),
        ('article', models.TextField()),
        ('publish', models.DateTimeField(default=django.utils.timezone.now)),
        ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='blog_posts', to=settings.AUTH_USER_MODEL)),
          ],

我们没有创建id,但为什么会有,原来django自动创建id相当于主键来唯一标识BlogArticles

发布博客
最简单的发布博客的方式就是利用Django默认的admin管理博客
利用python manage.py createsuperuser创建一个管理员,输入管理员姓名,密码要求至少8位
既然是管理员身份,当然管理员页面在blog/admin.py页面。输入代码

    from django.contrib import admin
    from .models import BlogArticles
    admin .site.register(BlogArticles)

这时,进入到http://127.0.0.1:8000/admin中就会将blog关联到admin中
admin页面
点击add可以进行添加博客,添加后在数据库中也可以查到
为在admin中显示到文章的更多属性,在admin.py中更新

    from django.contrib import admin
    from models import BlogArticles
    class BlogArticlesAdmin(admin.ModelAdmin):
        list_display = ("title","author","publish")
        list_filed =("publish", "author")
        search_field = ('title', "body")
        raw_id_field = ("author",)
        date_hierarchy = "publish"
        ordering = ['publish', 'author']
     admin.site.register(BlogArticles,BlogArticlesAdmin)

(使用Python2.7的小朋友有的没有pytz时区的包,需要安装一下使用python -m pip install pytz

页面访问博客
既然是博客当然不能只有管理员才能看见。
在blog/views.py中写函数

    from django.shortcuts import render
    from models import BlogArticles
    def blog_title(requset):#1 接受响应请求
        blogs = BlogArticles.objects.all() #2 获取BlogsArticles中所有信息
        return render(request,"blog/titles.html",{"blogs":blogs})3

对于render函数,第一个参数必须是requset,然后是传送数据的位置,并且数据使用数据字典的方式传送给模板,就是titles.html。
我们的blog中并没有titles.html,所以我们在blog的子目录templates中创建一个titles.html
因为templates是django默认的存放模板的地方,会自动到templates上查找render()函数
为了方便我们将所有模板相同的部分放在一个base.html中
利用基础模板编写titles.html

接下来为url配置路径,首先是将应用配置到项目中

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

再讲模板的路径配置到应用中

    from django.conf.urls import url
    from blog import views
    urlpatterns = [
        url(r'^$', views.blog_title, name="blog_title"),
    ]

“^ " 结束,所以访问此博客的路径就是http://127.0.0.1:8000/blog/
那么怎样查看博客内容
在blog/view.py中添加响应函数

    def blog_article(request, article_id):
        blog = BlogArticles.objects.get(id =article_id)
        pub = article.publish
        return render(request,"blog2/content.html"{"article":article,"publish":pub })

添加页面content.html
最后添加url路径

    url(r'(?P<article_id>\d)/$',views.blog_article,name = "blog_detail"),

这样,一个完整简单博客就创建好了。

猜你喜欢

转载自blog.csdn.net/sinat_38885850/article/details/82155390
今日推荐