• 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:
     
  • 相关阅读:
    linux下操作mysql
    数据指标系列:电商数据分析指标体系总结V1.0
    技巧系列:电脑微信多开方法
    Excel可视化:柱状图与柱状对比图
    数据指标系列:销售数据分析指标体系总结V1.0
    Excel:数据分析excel函数总结
    一种很简单的按键判断方法
    开始VC
    altium designer 画板子的一些收获
    stm32通用定时器
  • 原文地址:https://www.cnblogs.com/wangchuang/p/14843992.html
Copyright © 2020-2023  润新知