基础--app的其他功能模块

搭建开发环境
博文管理
用户管理
发表评论
若干其他功能

migrations:存放数据迁移文件的目录

admin.py:后台管理文件

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
1.独自占一个页面
admin.site.register(ArticlePost):将ArticlePost注册到后台中

2.合并成一个页面
# 定义一个行内 admin
class ProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    verbose_name_plural = 'UserProfile'
# 将 Profile 关联到 User 中
class UserAdmin(BaseUserAdmin):
    inlines = (ProfileInline,)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

apps.py:代表一个article功能模块

forms.py:表单文件

from .models import Profile用户注册

class Meta:
	内部类 class Meta 用于给 form定义元数据,指明了数据模型的来源和应传递的字段。

		model:
			指明数据模型来源
		fields:
			定义表单包含的字段

models.py:数据模型(Model)文件

作用:Django中通过模型(Model)映射到数据库,处理与数据相关的事务。
ArticlePost:博客文章数据模型

from django.utils import timezone:用于处理时间相关事务。
from django.contrib.auth.models import User:导入内建的User模型。
from django.db.models.signals import post_save引入内置信号
from django.dispatch import receiver引入信号接收器的装饰器
	用法:这种方法的好处是不需要对User进行任何改动,从而拥有完全自定义的数据表。
	缺点:一次只能执行一个app功能
		# 信号接收函数,每当新建 User 实例时自动调用
		@receiver(post_save, sender=User)
		def create_user_profile(sender, instance, created, **kwargs):
		    if created:
		        Profile.objects.create(user=instance)
		# 信号接收函数,每当更新 User 实例时自动调用
		@receiver(post_save, sender=User)
		def save_user_profile(sender, instance, **kwargs):
		    instance.profile.save()

class Meta:
	作用:内部类 class Meta 用于给 model 定义元数据,对整张表的共同行为。
	
		ordering:
			排序选项;参数'-created' 表明数据应该以倒序排列。
		db_table:
			数据库表名
		verbose_name:
			单数名称
		verbose_name_plural:
			复数名称
	
models.PositiveIntegerField(default=0):
	存储正整数的字段
	
models.ForeignKey(User, on_delete=models.CASCADE)
	作用:解决“一对多”关系的,一个作者可以有很多篇文章。
	使用 ForeignKey定义一个关系。这将告诉 Django,每个(或多个) ArticlePost 对象都关联到一个 User 对象。
	第一参数是当前的文章作者,参数 on_delete 用于指定数据删除的方式:级联删除模式
	
models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
	一对一
	
models.ManyToManyField()
	多对多
	
models.ImageField(upload_to='avatar/%Y%m%d/', blank=True)
	定义图片路径

models.CharField(max_length=100)
	定义字符串字段,最大长度为100

models.TextField()
	定义文本字段

models.DateTimeField()
	定义日期时间字段
	参数 default=timezone.now 指定其在创建数据时将默认写入当前的时间
	参数 auto_now=True 指定每次数据更新时自动写入当前时间

tests:测试文件

urls.py:项目的根路由文件

 path('article-list/', views.article_list, name='article_list'),文章目录页面
 path('article-detail/<int:id>/', views.article_detail, name='article_detail'),文章详情页面
 path('article-create/', views.article_create, name='article_create'), 写文章
 path('article-safe-delete/<int:id>/', views.article-safe-delete, name='article-safe-delete'),删除文章
 path('article-update/<int:id>/', views.article_update, name='article_update'),更新文章
 path('login/', views.user_login, name='login'),用户登录
 path('userprofile/', include('userprofile.urls', namespace='userprofile')),用户管理
 path('logout/', views.user_logout, name='logout'),用户退出
  path('register/', views.user_register, name='register'),用户注册
  path('delete/<int:id>/', views.user_delete, name='delete'),用户删除
  path('edit/<int:id>/', views.profile_edit, name='edit'),用户编辑
  path('post-comment/<int:article_id>/', views.post_comment, name='post_comment'),发表评论

app_name:部署的应用的名称
urlpatterns:路径的映射

views.py:视图(Views)文件

from django.http import HttpResponse:http响应
from .forms import ArticlePostForm:引入定义的ArticlePostForm表单类
from .forms import UserLoginForm检测用户登录
from django.contrib.auth import authenticate, login, logout:
	验证用户名称和密码是否匹配;实现了登录动作并将用户数据保存在session中;用户的退出
from django.contrib.auth.decorators import login_required:引入验证登录的装饰器,权限
from .models import Profile用户注册
from .forms import ProfileForm用户注册提交的表单

User.objects.get(id=request.user.id):
	指定目前登录的用户为作者
request.method:
	提交数据的方式
ArticlePost.objects.all():
	获得所有的对象(即博客文章)
ArticlePost.objects.get(id=id):
	传入一个文章id,取出相应的文章
article_post_form = ArticlePostForm(data=request.POST):
	取出POST提交表单的数据,赋值给article_post_form
		1.article_post_form.is_valid():
			提交的数据是否满足模型的要求
		2.new_article = article_post_form.save(commit=False):
			保存数据,但暂时不提交到数据库中
		3.new_article.save():
			将新文章保存到数据库中
	
user_login_form = UserLoginForm(data=request.POST)
	作用:取出POST提交表单的数据,赋值给user_login_form
		1.data = user_login_form.cleaned_data:
			清洗出合法数据
		2.user = authenticate(username=data['username'], password=data['password']):
		 	验证用户名称和密码是否匹配
	 	
Profile.objects.filter(user_id=id).exists():
	根据是否已经存在而动态的创建、获取
	Profile.objects.get(user_id=id)
	Profile.objects.create(user=user)
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷心兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值