zoukankan      html  css  js  c++  java
  • 使用django搭建博客并部署

    2017/8/31 18:27:59

    为了以后参考的方便,在这里总结一下django搭建博客网站的主要步骤。所有的代码都可以在[这里]获取。以下大部分的内容,参考自[http://www.kancloud.cn/wizardforcel/django-chinese-docs-18/](https://www.kancloud.cn/thinkphp/django-book)。

    需要强调的是,这里使用的django版本是1.8。这是因为,不同版本之间的django之间存在一定的差异。

    1.安装django

    在命令行中使用如下命令安装django

    pip install django==1.8
    

    安装结束后,在命令行中输入python,进入python命令行。然后尝试导入django

    >>> import django
    >>> django.get_version()
    '1.8'
    

    这说明,django安装成功了。

    2.创建项目mysite

    在命令行中,使用cd命令进入你想存储代码的目录,然后运行如下命令

    python django-admin.py startproject mysite
    

    于是,当前目录下建立了一个mysite目录,结构如下

    mysite/
    	manage.py
    	mysite/
    		__init__.py
    		setting.py
    		urls.py
    		wsgi.py
    

    从外层的mysite目录切换进去,通过如下命令,我们就能运行服务器

    python manage.py runserver
    

    http://127.0.0.1:8000/,我们将看到如下页面

    3.编辑setting.py及创建管理员账户

    在mysite/settings.py中保存着django项目的配置。通过编辑它,可以修改项目的配置。

    设置语言版本

    LANGUAGE_CODE = 'zh-cn'
    

    注:在1.9及以后的版本中,需要使用'zh-hans'

    更改时区

    TIME_ZONE = 'Asia/Shanghai'
    

    在这里还可以修改数据库设置,这里不做修改,使用默认sqlites数据库。

    修改完毕后,在命令行中运行如下命令,进行数据库的同步

    python manage.py syncdb
    

    运行此命令后,命令行会询问是否创建管理员账户。选择是,因为这将会很有用。

    重新运行服务器,访问http://127.0.0.1:8000/admin/,你将看到如下页面

    输入刚刚设置的用户名和密码就可以登录到网站的管理界面了。开不开心?当然,现在还没有多少功能。

    4.创建应用blog及基本的后台设置

    使用如下命令,创建应用

    python manage.py startapp blog
    

    这将创建一个blog目录,如下

    blog/
    	__init__.py
    	admin.py
    	models.py
    	tests.py
    	views.py
    

    为了激活这个应用,我们编辑mysite/setting.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/models.py中添加如下内容

    from django.db import models
    from django.contrib import admin
    
    
    class BlogsPost(models.Model):
        title = models.CharField(max_length = 150)
        body = models.TextField()
        timestamp = models.DateTimeField()
    
    admin.site.register(BlogsPost)
    

    其中,最后一行是为了在管理界面添加BlogsPsot,以便管理。

    再次运行如下命令,进行数据库同步

    python manage.py syncdb
    

    按照命令行的提示,运行如下命令在数据库中创建blog_blogpost数据表

    python manage.py makemigrations
    

    接着运行

    python manage.py mirgrate
    

    启动服务器,并登录到网站的管理界面,你将看到

    点击Blogs posts后面的增加按钮,创建文章。输入标题,正文和日期时间,并保存你的文章。

    接下来设置管理界面中blogs post显示。在blog/models.py中添加如下内容

    class BlogPostAdmin(admin.ModelAdmin):
    	list_display = ('title','timestamp')
    
    admin.site.register(BlogPostAdmin)
    

    刷新之前的页面,你将看到

    到这里,我们完成了一个简单的博客后台。

    5.前端部分并添加markdown支持

    我们写前端部分,使得我们可以查看之前写的博客。

    首先,我们在blog目录下创建templates目录,并添加模板文件index.html。现在我们的blog目录如下

    blog/
    	__pycache__/ ...
    	migrations/  ...
    	templates/
    		index.html		
    	__init__.py
    	admin.py
    	models.py
    	tests.py
    	views.py
    

    在index.html中添加如下内容

    {% for post in blog_list %}
    	<h2>{{post.title}}</h2>
    	<p> {{post.timestamp}}</p>
    	<p> {{post.body}}</p>
    {% endfor %}
    

    接下来,我们创建视图函数,将数据库中blogspost渲染到这个模板文件中。在blog/views.py中添加如下内容

    from django.shortcuts import render_to_response
    
    from blog.models import BlogsPost
    
    def index(request):
    	blog_list = BlogsPost.objects.all()
    	return render_to_response('templates/index.html',{'blog_list':blog_list})
    

    index函数将从数据库中的BlogsPost对象查询出来,渲染到index.html中,并返回index.html。我们现在的任务是将这个函数绑定一个URL。

    修改mysite/urls.py,如下

    from django.conf.urls import include, url
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url(r'^index/$','blog.views.index'),
    ]
    

    现在运行服务器,访问http://127.0.0.1:8000/index/,你将看到如下的页面

    接下来,对博文添加markdown支持。在blog/views.py修改index函数

    from markdown import markdown
    
    def index(request):
    	blog_list = BlogsPost.objects.all()
    	for post in blog_list:
    		post.body=markdown(post.body)
    	return render_to_response('index.html',{'blog_list':blog_list})
    

    修改blog/templates/index.html为

    {% for post in blog_list %}
    	<h2>{{post.title}}</h2>
    	<p> {{post.timestamp}}</p>
    	{% autoescape off %}
    	    {{post.body}}
    	{% endautoescape %}
    {% endfor %}
    

    参考[4]介绍了{% autoescape off %}的含义

    off的意思是关闭对html的转义,而将off替换成on就表示进行html转义,默认进行html转义。

    重新编辑博文,访问http://127.0.0.1:8000/index,我们将看到

    6.网站的部署

    下载Apache2.4,下载地址

    https://www.apachehaus.com/cgi-bin/download.plx#APACHE24VC09
    

    解压之后,修改Apache24/conf/httpd.conf中的以下内容(配合ctrl+f)

    Define SRVROOT "D:/Apache24"  
    ServerRoot "${SRVROOT}" 
    #ServerName www.example.com:8000
    Listen 127.0.0.1:8000 
    

    启动Apache24/bin/httpd.exe程序,访问http://127.0.0.1:8000,会在浏览器上看到Apache的欢迎界面。

    下载mod_wsgi,下载地址

    http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
    

    使用pip安装下载的whl。安装成功后,在命令行中运行如下命令

    mod_wsgi-express module-config
    

    拷贝输出的三行结果,复制到Apache24/conf/httpd.conf的末尾。

    将如下内容拷贝到Apache24/conf/httpd.conf的末尾。请将[~]替换为你项目的地址。

    #指定myweb项目的wsgi.py配置文件路径  
    WSGIScriptAlias / [~]/wsgi.py  
      
    #指定项目路径  
    WSGIPythonPath [~]  
      
    <Directory [~]/mysite>  
    <Files wsgi.py>  
        Require all granted  
    </Files>  
    </Directory>  
      
    Alias /static [~]/static   
    <Directory [~]/static>   
        AllowOverride None  
        Options None  
        Require all granted  
    </Directory> 
    

    然后在mysite/setting.py中添加或修改以下内容

    DEBUG = False   
    TEMPLATE_DEBUG = False  	  
    ALLOWED_HOSTS = ['127.0.0.1', 'localhost']  
    

    完成这些之后,我们还必须收集关于admin的静态文件。

    在mysite/setting.py中将以下内容

    STATIC_URL = '/static/'  
    #STATIC_ROOT = os.path.join(BASE_DIR, "static")  
    TEMPLATE_DIRS = (  
        os.path.join(BASE_DIR, "templates"),   
    )  
      
    STATICFILES_DIRS = (  
        os.path.join(BASE_DIR, "static"),   
    )  
    

    修改为

    STATIC_URL = '/static/'  
    STATIC_ROOT = os.path.join(BASE_DIR, "static")  
    TEMPLATE_DIRS = (  
        os.path.join(BASE_DIR, "templates"),   
    )    
    STATICFILES_DIRS = (  
        #os.path.join(BASE_DIR, "static"),   
    )
    

    在manage.py的目录下运行如下命令

    python manage.py collectstatic
    

    运行完毕之后,将上一步mysite/setting.py的设置还原。

    部署完毕。

    运行Apache24/bin/httpd.exe查看效果吧。

    参考

    [1] 看云-django中文文档1.8 https://www.kancloud.cn/wizardforcel/django-chinese-docs-18/

    [2] 虫师-django快速搭建blog http://www.cnblogs.com/fnng/p/3737964.html

    [3] 一介码农-在django中使用markdown http://blog.csdn.net/feelang/article/details/25626725

    [4] 追梦者的部落格-django输出html内容 http://blog.csdn.net/it_dream_er/article/details/52355921

    [5] 蜗牛工作站-Django1.7+Apache2.4部署 http://blog.csdn.net/yingmutongxue/article/details/43985559

    [6] 小二走刀口-whl文件中找不到mod_wsgi.so文件解决办法 http://blog.csdn.net/chao_8023/article/details/74012324

  • 相关阅读:
    Python xrange与range的区别返回的结果不一样
    matlab画立方体
    python查询数据类型
    Ubuntu下安装微信(electronic-wechat)
    python判断数组中是否有重复元素
    python构建数组
    Numpy中np.max(即np.amax)的用法
    你不知道C#只带有 get 访问器的属性是只读属性?
    Windows 平台安装配置 MongoDB
    一日一技:Ocelot网关使用IdentityServer4认证
  • 原文地址:https://www.cnblogs.com/super-zhang-828/p/7461030.html
Copyright © 2011-2022 走看看