django 实战1
出错代码: 如上图绿框所示,在settings.py中的'DIRS': [BASE_DIR / 'templates']
错误分析: 这个提示大概是说:“类型错误:不支持操作类型为字符串和字符串”,直接把两个字符串(BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))在前面定以为基础路径,也就是整个项目的路径)在列表中连接起来是不合适的,这里系统将“/”理解为了除号,系统理解为“字符串/字符串”。实际上这里想表达的意思将BASE_DIR 和’templates’连在一起形成一个完整路径,而“/”是路径分隔符。
修改方法: 'DIRS': [str.format(BASE_DIR, '/templates')],再次运行就成功了。
运行命令:
python manage.py runserver
pycharm可不用
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
查看版本
django-admin --version
创建APP
python manage.py startapp testapp
pycharm中命令
pip install django-guardian
pip install django-simpleui
pip install Pillow
pip install -r requirements.txt
cannot import name 'six' from 'django.utils' 版本退回2.X
博客知识点总结
mode:
1.db_table 自定义表名
2.unique_together = (('name', 'author'),) 唯一条件
3.__str__定义扩散
def __str__(self):
return '{}-{}'.format(self.author, self.name)
4.修改与添加时间自动
add = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
mod = models.DateTimeField(auto_now=True, verbose_name='最近修改')
5.url函数
def url(self):
# 前台展示链接
from django.utils.safestring import mark_safe
if self.is_active:
full_path = '{}/x/tag/{}/'.format(settings.SERVER, self.pk)
return mark_safe('<a href="{}" target="_blank">{}</a>'.format(full_path, full_path))
return "不可用标签"
6.self.pk代表取住建
def get_absolute_url(self):
return '/x/tag/{}/'.format(self.pk)
7.help_text 提示信息
8.图片上传方式
alipay = models.ImageField(upload_to='dsm/alipay/', null=True, verbose_name='支付宝打赏码', blank=True)
9.proxy = True 代理model不会生成新表
10.limit_choices_to 用法
author = models.ForeignKey(
to=UserAccount,
on_delete=models.CASCADE,
limit_choices_to={
"is_active": True,
"is_staff": True,
},
verbose_name='作者'
)
11.查找引用方式
12.用法
def keywords(self):
# 用于文章详情页seo优化的关键字
tags = self.tags.filter(is_active=True)
return '、'.join([tag.tag for tag in tags])
13.Q,F,only,defer等内置函数
admin:
1.fieldsets间隔显示更有条理
2.Account = get_user_model() 内置函数
3.list_filter 多条件筛选
4.ordering = ("-add",) 按照田间时间倒序
5.search_fields = ("title", "author__username", "author__email") 双下划线方式取外键表字段
6.hasattr 判断是否有某个属性或者方法
7.重写截取再下一层之前执行的方法【重要的】
def save_model(self, request, obj, form, change):
# todo 新增文章时, 发邮件给站长, 提示站长进行审核
# if not change: send_mail
# 当没有作者时, 将当前登陆者作为作者
if (not hasattr(obj, 'author')) or (not obj.author):
obj.author = request.user
obj.save()
def get_queryset(self, request):
# 筛选出当前登陆者的文章
qs = super().get_queryset(request)
return qs.filter(author_id=request.user.id)
def has_add_permission(self, request):
# 写文章的权限
if request.user.is_superuser:
return True
return request.user.is_active
def has_delete_permission(self, request, obj=None):
# 删除权限
if obj is not None:
if request.user.is_superuser:
return True
if request.user.id == obj.author.id:
return True
return False
8.style_fields
style_fields = {'user_permissions': 'm2m_transfer'} 类似多对多有关吧
orm:
urls:例子
blog/URLS 分发的
path('cat/<pk>/', views.CatList.as_view()), # 某类别文章列表
# =============博客业务路由=============
urlpatterns.extend([
path('x/', include('blog.urls', namespace='x')),
])
Middleware:
posted on 2021-06-03 09:55 HOT SUMMER 阅读(61) 评论(0) 编辑 收藏 举报