• Django开发博客一(搭建模型和准备数据)


    一.环境搭建

    1.创建虚拟环境

    virtualenv blogenv

    2.安装django1.11

    pip install django==1.11

    3.新建工程

    django-admin startproject myblog

    4.创建工程下的应用(进入工程目录下)

    django-admin startapp blog

    django-admin startapp comment

    5.打开pycharm,在setting文件中完成基本设置

    LANGUAGE_CODE = 'zh-hans'
    
    TIME_ZONE = 'Asia/Shanghai'
    #在INSTALLED_APPS中激活blog,comment
    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
    'comment'
    ]
    #在Templates中设置templates更目录位置
    'DIRS': [os.path.join(BASE_DIR,'templates')],

    二.编写模型

    1.在models文件中编写Post模型

    from django.db import models
    from django.contrib.auth.models import User
    # Create your models here.
    from django.utils import timezone
    import markdown
    from django.utils.html import strip_tags


    class Category(models.Model):
    name=models.CharField(max_length=100,verbose_name='类别')
    slug=models.SlugField()
    def __str__(self):
    return self.name
    class Meta:
    ordering=('name',)
    verbose_name='类别'
    verbose_name_plural=verbose_name
    class Post(models.Model):
    category=models.ForeignKey(Category,verbose_name='类别',on_delete=models.CASCADE)
    auth=models.ForeignKey(User,verbose_name='作者',on_delete=models.CASCADE)
    slug=models.SlugField()
    title=models.CharField(max_length=200,verbose_name='标题')
    excert=models.CharField(max_length=200,verbose_name='摘要')
    content=models.TextField(verbose_name='正文')
    created=models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
    updated=models.DateTimeField(auto_now=True,verbose_name='更新时间')
    status=models.CharField(choices=(('publish','已发表'),('unpublish','未发表')),default='publish',max_length=20)
    publish=models.DateTimeField(verbose_name='发表时间',default=timezone.now)
    def __str__(self):
    return self.title
    class Meta:
    verbose_name='博文'
    verbose_name_plural=verbose_name
    ordering=['status','-publish']
      #用markdown处理文本内容,根据文本内容生成摘要
    def save(self,*args,**kwargs):
    md = markdown.Markdown(
    extensions=[
    'markdown.extensions.extra',
    'markdown.extensions.codehilite',
    ]
    )
        #markdown处理
    self.content=md.convert(self.content)
    if not self.excert:
            #strip_tags将HTML转成字符串
    self.excert=strip_tags(self.content)[:54]
    super(Post, self).save(*args,**kwargs)

    2.生成数据迁移表

    #python manage.py makemigrations

    3.数据迁移

    #python manage.py migrate

    4.在admin.py中注册模型(django自带的后台管理系统,提供一个良好的管理界面,更强大的有xadmin)

    from django.contrib import admin
    from .models import Post,Category
    # Register your models here.
    class CategoryAdmin(admin.ModelAdmin):
        #需要显示字段
        list_display = ['name']
        #当slug为空时,根据name字段生成slug
        prepopulated_fields = {'slug':('name',)}
    admin.site.register(Category,CategoryAdmin)
    class PostAdmin(admin.ModelAdmin):
        list_display = ['title','excert','status','publish']
        #字段筛选器
        list_filter = ['publish']
        prepopulated_fields = {'slug':('title',)}
        #搜索框
        search_fields = ['title','content']
        #排序
        ordering = ['status','-publish']
    admin.site.register(Post,PostAdmin)

    5.创建管理员账号

    #python manage.py createsuperuser

    6.启动服务,并登录http://127.0.0.1:8000/admin/

    python manage.py runsever

    三.从Excel读取数据到django数据库中

     1.新建data文件夹,将3-wp_posts.xlsx放入该文件夹

    2.代码编写,详情看注释

    import openpyxl
    '''
    2007版以前的Excel(xls结尾的),需要使用xlrd读,xlwt写。
    2007版以后的Excel(xlsx结尾的),需要使用openpyxl来读写。
    '''
    def read07Excel(path,mlst):
        wb=openpyxl.load_workbook(path)
        sheet=wb.get_sheet_by_name('wp_posts')
        j=0
        for row in sheet.rows:
            i=0
            if j!=0:
                 mlst2 = []
                 for cell in row:
                    if i==4 or i==5:
                        mlst2.append(cell.value)
                    i=i+1
                 mlst.append(mlst2)
            j+=1
    file_path='data/3-wp_posts.xlsx'
    mlst=[]
    read07Excel(file_path,mlst)
    # print(mlst)
    import os
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myblog.settings")
    import django
    import random
    django.setup()
    from blog.models import Post,Category
    from django.contrib.auth.models import User
    from django.shortcuts import get_object_or_404
    def main(category,user,content,title):
        Post.objects.create(category=category,auth=user,content=content,title=title)
    categories=Category.objects.all()
    user=get_object_or_404(User,username='admin')
    for i in range(25):
        category=random.choice(categories)
        for lst in mlst:
             main(category,user,lst[0],lst[1])
  • 相关阅读:
    Java中使用Base64编码URL
    JSON Web Token (JWT)入门学习
    1047. 删除字符串中的所有相邻重复项
    1021. 删除最外层的括号
    使用shell获取随机端口<帮你解决端口的占用烦恼>
    初始化一个vue项目并生成完整的目录结构
    mysql-常用字符函数
    设计模式-单例模式-饿汉和懒汉
    Java-指令的重排序
    Java-反射类加载到内存分析
  • 原文地址:https://www.cnblogs.com/hhy-love-python/p/8496316.html
Copyright © 2020-2023  润新知