自动化-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})

浙公网安备 33010602011771号