Django开发个人博客网站

python
0 391

csroad
csroad 举报
2019-07-18

1. 安装python和django并配置环境变量;

2. 将 django-admin.py 文件复制到目录A(A表示你想在该目录下创建项目);

3. 输入【 python django-admin.py startproject project_name 】创建项目;

4. 输入【 python .\manage.py runserver 127.0.0.1:8000 】运行本地IP,跑起项目,此时即可选择浏览器,输入网址 “http://127.0.0.1:8000/” 打开网页;

5. 输入【 python .\manage.py startapp appName 】创建app项目,并进行如下配置:

  1)手动添加urls.py;

  2)配置【setting.py】,包括appName、templates、static等(后续的数据库类型也是在这里配置);

  3)理解每个appName下的urls.py和projectName目录下的urls.py的关系,比进行配置;

  4)编写appName目录下的【views.py】,返回变量和具体网页;

6. 输入【 python .\manage.py sycndb 】创建数据库

-------------------------------------------------------------------------------------------------------------------------------

1.pycharm,python,django下载安装好后,新建一个项目:mysite (左侧栏中的django)

文件说明如下:

  • 【manage.py】一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
  • 【__init__.py】一个空文件,告诉 Python 该目录是一个 Python 包。
  • 【settings.py】该 Django 项目的设置/配置。
  • 【urls.py】该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
  • 【wsgi.py】一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

    a.setting.py文件中设置下,将语言改为中文,时区改为上海(没有北京时区):

  1. LANGUAGE_CODE = 'zh-hans'
  2. TIME_ZONE = 'Asia/Shanghai'

2.安装mysql,navicat并连接创建好数据库myblog

a.修改django中数据库配置,在setting.py中,如下:

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME': 'myblog', #数据库名
  5. 'USER':'root', #用户名
  6. 'PASSWORD':'******', #密码
  7. 'HOST':'127.0.0.1', #本机地址
  8. 'PORT':'3306', #端口
  9. }
  10. }

b.将django与mysql关联上了,但Python并没有与mysql连接上,必须在pycharm的Terminal中安装mysqlclient:

pip install mysqlclient

注:测试完整代码:https://github.com/geerniya/django_blog

3.创建APP:python manage.py startapp myblog

a.到setting.py中的INSTALLED_APPS中,如下:

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'myblog', #新建立的app
  9. ]
  1. 安装pymysql,因为python3.5没有mysqldb包
  2. pip install pymysql在settings.py中添加下面内容:
  1. import pymysql
  2. pymysql.install_as_MySQLdb()

         将settings里面的DATABASES改成MySQL相关

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'OPTIONS':{'read_default_file': os.path.join(BASE_DIR, 'my.cnf'),}
  5. }
  6. }

在settings的上一级目录中添加 my.cnf 文件,内容如下:

  1. [client]
  2. database = 'myblog'
  3. user = 'root'
  4. password = '123456'
  5. default-character-set = utf8

进入mysql,查看是否有 miniblog数据库,没有的话需手动创建

 

b.迁移数据库:

Tools下的run manage.py task下依次直接执行命令:python manage.py makemigrations   ; python manage.py migrate

注:

3.博客网站数据库的设计

a. 下面在myblog目录下的models.py中创建这三个表,由于Blog表包含外键与多对多关系,因此首先应当建立另外两个表:

分类(Category)表的创建:

  1. class Category(models.Model):
  2. """
  3. 文章分类
  4. """
  5. name = models.CharField(verbose_name='文章类别', max_length=20)
  6. class Meta:
  7. verbose_name = '文章类别'
  8. verbose_name_plural = verbose_name
  9. def __str__(self):
  10. return self.name

这里我们只需要包含一个字段name就行了。

标签(Tag)的创建:

  1. class Tag(models.Model):
  2. """
  3. 文章标签
  4. """
  5. name = models.CharField(verbose_name='文章标签', max_length=20)
  6. class Meta:
  7. verbose_name = '文章标签'
  8. verbose_name_plural = verbose_name
  9. def __str__(self):
  10. return self.name

博客(Blog)表的创建:

  1. from django.utils import timezone
  2. class Blog(models.Model):
  3. """
  4. 博客
  5. """
  6. title = models.CharField(verbose_name='标题', max_length=100)
  7. content = models.TextField(verbose_name='正文', default='')
  8. create_time = models.DateTimeField(verbose_name='创建时间', default=timezone.now)
  9. modify_time = models.DateTimeField(verbose_name='修改时间', auto_now=True)
  10. click_nums = models.IntegerField(verbose_name='点击量', default=0)
  11. category = models.ForeignKey(Category, verbose_name='文章类别')
  12. tag = models.ManyToManyField(Tag, verbose_name='文章标签')
  13. class Meta:
  14. verbose_name = '我的博客'
  15. verbose_name_plural = verbose_name
  16. def __str__(self):
  17. return self.title
  • 关于博客表有以下几点需要注意的:
  • 标题应当限定长度,我们设定最大值为100
  • 内容不用限定长度,因此用的是TextField字段
  • 创建时间按理说应该是不能修改的,应该设定成auto_now_add=True,这样在添加对象时,时间是默认成现在的,且不能修改,可以说你在后台就看不到它。但因为我们现在是开发环境,之后还要从后台添加数据进行测试,如果时间都一样的话,很多功能体现不出来,因此现在设定成可以更改的样式,真正部署时,建议改成auto_now_add=True。
  • 修改时间直接设定成,auto_now=True,在你修改时,会自动变成当前时间。
  • 关于ForeignKey与ManyToManyField,请自行查看相关文档资料

最后: 再次执行:

  1. makemigrations
  2. migrate
  • 即可将新建的这三个表添加到我们的数据库myblog中:
  1. auth_group,
  2. auth_group_permissions,
  3. auth_permission,
  4. auth_user_groups,
  5. auth_user_user_permissions,
  6. django_admin_log,
  7. django_content_type,
  8. django_migrations,
  9. django_session,
  10. myblog_blog, #新增的博客表
  11. myblog_blog_tag, #这个是博客与标签的多对多关系表
  12. myblog_category, #新增的分类表
  13. myblog_tag #新增的标签表
  • 需要说明的是,这里我们只给出了最开始设计时考虑到的情况,在后续开发过程中,可以随时对其进行变更。当多数据表信息变动时,要执行makemigrations 与 migrate 这样才能使改动生效。

4.通过admin管理后台

a.http://127.0.0.1:8000/admin管理用户配置

pycharm中输入如下命令:

createsuperuser

admin配置:

登录后台后,我们看到此时的后台只有用户、组和最近动作,并没有我们之前创建的我的博客、博客分类、博客标签这些内容。

我们可以在admin.py中进行配置,将其在后台展现出来:

  1. from myblog.models import Blog, Category, Tag
  2. admin.site.register(Blog)
  3. admin.site.register(Category)
  4. admin.site.register(Tag)
  • 此时,再次刷新博客admin页面,即可看到我们创建的三张表,并可进行增加、修改、删除操作。 

b.现在进入博客只有标题展示出来,如果我们还想添加其它字段,比如点击数、发表时间等,同样可以在admin.py中进行配置:

  1. class BlogAdmin(admin.ModelAdmin):
  2. list_display = ['title', 'click_nums', 'category', 'create_time', 'modify_time']
  3. admin.site.register(Blog, BlogAdmin)

如果还想对其它表进行配置,可以按照同样的方法,创建一个继承类即可。下面的注册也需要改一下。

配置完后,刷新下后台,即可看到我们已经成功的将点击数、博客分类、创建时间、修改时间这些字段添加进来了。

5.博客首页的开发

a.现在还没有首页,因为还没有模板:

博客前端模板托管在GitHub:django_blog_templates

将项目下载到本地后,将static文件夹整个拷贝到博客项目根目录下,然后在将index.html拷贝到templates目录下。这里的index.html就是我们博客的首页。