自动化-day13-Django1-基础

1、Django

  Django是一个服务端的开发框架

  在命令行模式下使用cd命令进入对应目录后,可以使用

django-admin startproject #此处添加项目名称# 

  来创建Django项目

  创建完成后,进入项目文件夹内,使用

Python manger.py runserver #0.0.0.0:8080此处可以设置端口后,不设置则默认为8000#

  来运行Django项目

 

  配置Django

  a、setting.py文件

    ALLOWED_HOSTS = []  用于配置白名单用户,当启动项目时使用0.0.0.0则默认只有自己能访问,该配置为空

    TEMPLATES  用于设置前后端不分离时使用

    ROOT_URLCONF  用于配置URL文件

    DATABASES  用于配置数据库信息,Django使用文件数据库

    LANGUAGE_CODE = 'en-us'  #语言可以设置为中文‘zh-Hans’

    TIME_ZONE = 'UTC'  #时间修改为东8区,即‘Asia/Shanghai’

  b、urls.py

    用于配置该项目的所有url信息,即url中IP后的路径

 

  ※也可以使用pycharm进行创建项目,流程如下

    

     pycharm创建的Django项目可以自动识别,手动创建的Django项目可以使用以下方法让pycharm识别:

    首先在设置中启动Django支持

    

    之后点击Edit Configruations进行设置

    

 

     最后修改名称及路径即可

    

 

    pycharm识别Django项目后,可以使用

    

     来开启manage.py命令模式,在该模式下pycharm默认将命令于manage中执行,因此只需要数据参数即可。

 

 

  框架正常启动后,可以使用

Python manger.py startapp #此处添加项目名称#

  来创建基于Django的子项目,新建子项目后需要在setting.py中的INSTALLED_APPS中配置子项目名

  子项目中admin.py用于配置后台管理页面、models.py用于配置数据库相关、test.py用于写测试相关、view.py用于编写项目逻辑

  admin.py

from django.contrib import admin
from . import models# 导入models文件
# Register your models here.
# python mange.py createsuperuser #创建后台管理用户
# 创建完成后可以登陆后台管理表数据

class CategoryAdmin(admin.ModelAdmin):
    # 页面显示表的哪些字段
    list_display = ['id','name','create_time','update_time']
    # 允许用户使用哪些字段进行筛选
    list_filter = ['name']
    # 允许用户使用哪些字段进行搜索
    search_fields = ['name']
    # 默认使用哪个字段进行排序,默认升序排列,字段加'-'可改为降序
    ordering = ['id']

# 向admin中导入表,表的参数使用CategoryAdmin定义的方法
admin.site.register(models.category,CategoryAdmin)
admin.site.register(models.Artical)

#修改网页标签名称
admin.site.site_title = 'sky'
#修改登录后的名称
admin.site.site_header = "sky后台管理"

  models.py

from django.db import models

# Create your models here.
#创建表结构后 需在Terminal中执行python manage.py makemigrations 【user】 #【】为子项目名,可为空
#执行后在对应项目中会生成0001_initial.py,之后在执行python manage.py migrate 【user】来生成表
#若不更改表名称则表默认名称为【项目名】_categral

class Base_model(models.Model):
    #参数:verbose_name-字段名,auto_now_add自动添加数据增加时间
    create_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True)
    #参数:verbose_name-字段名,auto_now自动添加操作的当前时间
    update_time = models.DateTimeField(verbose_name='修改时间',auto_now=True)
    #abstract表示只是用来继承的基类,不需要建表
    class Meta:
        abstract = True

class category(Base_model):
    #参数:verbose_name-字段名,max_length-字段长度,unique-是否唯一,null-是否为空,默认为False不为空
    name = models.CharField(verbose_name ='分类名称',max_length=50,unique=True,null=False)

    class Meta:
        #alter表的名字,更新表结构后,需执行makemigration和migrate来更新表
        db_table = 'category'
        #管理系统显示的表名
        verbose_name = '文章分类'
        #表名的复数显示与表名一致
        verbose_name_plural = verbose_name
        #确定如何排序
        ordering = ['-create_time']

    def __str__(self):
        return self.name
        #管理时操作数据后,返回操作的数据字段

class Artical(Base_model):
    title = models.CharField(verbose_name ='文章标题',max_length=100)
    content = models.TextField(verbose_name='文章内容')
    read_count = models.IntegerField(verbose_name='阅读次数',default=0)
    #创建外键,参数依次为:表名,是否在库中建立外键True为不建立,
    #删除本表数据是否会影响关联表
        # models.DO_NOTHING 表示不删除
        # models.CASCADE    一起删除
        # models.SET_DEFAULT    设置默认值
        # models.SET_NULL   设置为空值
        # models.PROTECT    如果对应数据不为空则不允许删除
        # models.SET    自定义函数
    category = models.ForeignKey(category,db_constraint=True,on_delete=models.PROTECT,verbose_name='分类')


    class Meta:
        db_table='Artical'
        verbose_name = '文章'
        verbose_name_plural = verbose_name
        ordering = ['-create_time']

    def __str__(self):
        return self.title

  view.py

from django.shortcuts import render
from django.shortcuts import HttpResponse #接口需要返回数据时声明
from django.http.response import JsonResponse #接口需要返回json数据时声明
from . import models

from hashlib import md5
def sign(s):
    news = s
    m = md5(news.encode())
    return m.hexdigest()

# Create your views here.
def index(request): #如何写接口
    categories = models.category.objects.all()
    Artical = models.Artical.objects.all()
    title = 'My Blog'
    #返回的三个参数为请求,前端页面,传入前端的使前端可以使用字典数据
    #前端使用字典数据是需使用两个大括号包裹住key
    return render(request,'index.html',
                  {'title':title,'categories':categories,'Artical':Artical})

def get_sign(request):#获取请求参数※需注意大小写
    # print(request.method)#请求方式
    # print(request.body)#请求体
    # print(request.META)#请求头
    # print(request.GET)#url中的参数
    # print(request.POST)#请求中的键值对
    # print(request.FILES)#文件
    # print(request.COOKIES)#cookies
    s = request.GET.get('str')
    result = sign(s)
    data= {"code":0,"data":result}
    return JsonResponse(data)

def category_view(request):#获取数据库数据
    all = models.category.objects.all()#导入表中所有数据
    one = models.category.objects.get(name = 'Java')#导入表中单条数据
    #get函数必须返回1条数据
    ones = models.category.objects.filter(name = 'Java')
    #filter函数可以返回多条数据,返回的数据类型为list
    result = models.category.objects.filter(name = 'Java').exists()
    #exists判断该数据是否存在,count返回有多少条数据

    c = models.category.objects.get(id='1')#通过分类查询关联表中的文章
    print(c.artical_set.all())
    return HttpResponse("OK")

def category(request,id):
    #url:127.0.0.1:8000/category/1
    #使用url直接传入的参数
    articles = models.Artical.objects.filter(category_id=id)
    return render(request,'category.html',{'articles':articles})

def detail(request,id):
    articles = models.Artical.objects.get(id=id)
    #请求中修改数据库参数
    articles.read_count+=1
    articles.save()
    return render(request,'detail.html',{'art':articles})

 

posted @ 2020-12-04 16:06  心淡灬人懒  阅读(99)  评论(0)    收藏  举报