在 mysite的项目下创建 article app
pythone3 manage.py startapp article
article下的目录
admin.py #设置管理员页面的显示
__init__.py
models.py #数据库模型在这里定义
apps.py #app的配置文件
migrations #执行 python3 manage.py makemigrations 生成的对应sql文件的文件夹
__pycache__
tests.py #django的调式文件
views.py #视图文件定义回调函数
urls.py #url设置
templates #文件夹默认没有,可以创建 ,存放模板文件
static #文件夹默认没有,存放静态文件
models.py的文件设置内容
from djang.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.
定义数据库模型,要继承models.Model
class Article(models.Model):
#title 表示数据库表里的字段 models.CharField 表示数据的类型 max_length表示数据的长度
title = models.CharField(max_length=30)
content = models.TextField()
#当我们使用python3 manage.py makemigrations
#python3 manage.py migrate时
#我们想在想添加created_time字段于是我们写了如下内容
#created_time = models.DateTimeField()
#然后保存
#然后输入
#python3 manage.py makemigrations 会报一个提示
#这是因为前面的字段已经有值,创建created_time,django 不知道用什么数据对应前面的数据
#解决方法
#1.输入python3 manage.py makemigrations 有提示 输入 1
#在输入 timezone.time
#2.直接设置默认值 dafault表示默认值
#created_time =models.DateTimeField(default=timezone.now)
#当新增字段时自动添加时间(在创建表的时间,后面改的数据不会影响该时间的变化)
#created_time =models.DateTimeField(auto_now_add=True)
#自动用现在的时间给last_updated_time(当改变字段的内容是时间会变化)
#last_updated_time = models.DateTimeField(auto_now=True)
#--------------------------------------------------------------------
#设置外键(即另一个模型或另一张表)
#models.ForeignKey(模型名,对另个表的操作,default默认值)
#字段名的修改
#如auther错误,将其改成author
#然后执行 python3 manage.py makemigrations
#会提示是非将article.auther 改为 article.author y是修改,n不改
#auther = models.ForeignKey(User,on_delete=models.DO_NOTHING,default=1)
author = models.ForeignKey(User,on_delete=models.DO_NOTHING,default=1)
#-------------------------------------------------------------------
#布尔数据类型的设置
is_deleted =models.BooleanField(default=False)
#数值类型
readed_num =models.IntegerField(default=0)
admid.py内容
from django.contrib import admin
# Register your models here
from .models import Article
#
#用于设置显示在管理员页面的模型
#只显示模型不显示模型中的内容
#admin.site.register(Article)
#------------------------------------------------------
#用于设置管理员页面显示模型中的内容
#title content是模型的字段
#类名可以自己定义
class ArticleAdmin(admin.ModelAdmin):
#将模型的字段以元组赋值给list_display ,list_display是一个特有的变量
list_display= ("id","title","content",'author','is_deleted','created_time',"last_updated_time")
#id以升序的形式显示在管理页面,降序则将"id"改为 "-id"
ordering=("id",)
admin.site.register(Article,ArticleAdmin)
#---------------------------------------------------------------------------
#@admin.register(Article)
views.py设置
from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse,Http404
from .models import Article
# Create your views here.
#def article_detail(request,article_id):
# #错误处理1
# #Article.objects.get(条件)
# try:
# article =Article.objects.get(id=article_id)
# except Article.DoesNotExist:
# return HttpResponse("不存在")
# return HttpResponse("文章标题: %s <br> 文章内容: %s " % (article.title,article.content))
#---------------------------------------------------
#def article_detail(request,article_id):
# #错误处理2
# try:
# article =Article.objects.get(id=article_id)
# context ={}
# context["article_obj"]=article
# return render(request,'article_detail.html',context)
# except Article.DoesNotExist:
raise Http404("not exist")
# return HttpResponse("<h3>文章标题: %s</h3> <br><p> 文章内容: %sp> " % (article.title,article.content))
#----------------------------------------------------------------
def article_detail(request,article_id):
#错误处理3
article = get_object_or_404(Article,id=article_id)
context ={}
context["article_obj"]=article
return render(request,'article_detail.html',context)
#------------------------------------------------------------------
#文章列表
def article_list(request):
#将模型中的数据全部赋值给articles
# articles =Article.objects.all()
#将过滤模型中is_deleted=False的数据
articles =Article.objects.filter(is_deleted=False)
context={}
context['articles']=articles
return render(request,'article_list.html',context)
urls.py设置
from django.urls import path
from . import views
urlpatterns =[
path("<int:article_id>",views.article_detail,name='article_detail'),
path("",views.article_list,name="article_list")
]