stacklens / dusai-blog

杜赛的博客的评论区。详情见 Issue。
2 stars 0 forks source link

article/31/ #13

Open stacklens opened 4 years ago

stacklens commented 4 years ago

https://www.dusaiphoto.com/article/31/

stacklens commented 4 years ago

旧评论区读者问题集中帖:


Q:请问博主,我在注册微博第三方登陆的时候,提示你的应用“xxx网站”申请驳回 驳回理由:微博登陆按钮无法正常使用,请修复后再提交审核,微博登入功能接入地址:https://open.weibo.com/wiki/Connect/login, 请问微博注册的流程是啥啊,还有那个取消回调地址怎么填呢?

A:这些都是微博定的规矩,我真记不太清楚了。

我自己也是跟着一些博客文章弄的,您试着搜索一下,应该有很多可参考的文章。

大概就是需要在新浪开放平台注册,按着微博给的文档往下走。

取消授权回调我是没有填的,可以正常工作。


T:在header.html中有如下这句,请问这个user是默认在模板中就可以使用的对象么?好像view中没有传递它过来呢?都有哪些是在html中可以直接使用的对象呢,我打印request中出现的对象是不是就代表可以在html模板中直接使用?谢谢博主

{% if user.is_authenticated %}

在网上找到答案了,一个是user,一个是perms。是默认就有的。

在模版代码中,有两个属性,是Django给你提供好的,一个是user,一个是perms。

比方说我们可以这样判断一个用户是否是登陆用户,进而作出不同的显示:

{% if user.is_authenticated %}

    <p>Welcome, {{ user.username }}. Thanks for logging in.</p>

{% else %}

    <p>Welcome, new user. Please log in.</p>

{% endif %}

user变量是一个User或者AnoymousUser对象。

perms变量是一个django.contrib.auth.context_processors.PermWrapper对象,对当前用户的User.has_module_perms和User.has_perm进行了封装。这个包装器让你使用perm起来非常的方便。比如,我们需要判断当前用户是否拥有school应用下的所有权限,则使用 {{perms.school}}

我们如果判断当前用户是否拥有school应用下发表讨论的权限,则使用{{perms.school.publish_discussion}}

duanqichao commented 3 years ago

到这里,用户能登陆和登出了,但是好像并没有什么权限控制,不登陆的用户依然可以删除文章,写文章,对文章进行修改吗?

aiguoli commented 3 years ago

如果已登录的账户进入登陆页面,怎么让他自动跳转到别的地方

stacklens commented 3 years ago

如果已登录的账户进入登陆页面,怎么让他自动跳转到别的地方

对应视图里判断一下用户的登录状态就可以了。

Albert-liulei commented 3 years ago

在django3中登陆后下,用户名下拉框无法显示。不知道是哪里错了。😂

tangxinyuGit commented 3 years ago

如果下拉框不好用的话,可以尝试把那部分代码更改成下面的形式:

                    <li class="nav-item dropdown">
                        <a class="nav-link dropdown-toggle" href="#" id="navbarDarkDropdownMenuLink" role="button"
                           data-bs-toggle="dropdown" aria-expanded="false">
                            {{ user.username }}
                        </a>
                        <ul class="dropdown-menu dropdown-menu-dark" aria-labelledby="navbarDarkDropdownMenuLink">
                            <li><a class="dropdown-item" href="{% url "userprofile:logout" %}">退出登录</a></li>
                        </ul>
                    </li>
dlzmoe commented 3 years ago

楼上的方法非常好用

ghost commented 3 years ago

我使用django3, 同样遇到了下拉用户名无法显示的bug,有谁解决了吗?

CoreJK commented 3 years ago

回复楼上的问题: 你去header.html里面,将{{ user.name }}修改为{{ user.username }},刷新下浏览器就好了。 user 对象,是在用户登录的视图里面实列化了,如下代码片段可知

# userprofile\views.py
def user_login(request):
    """用户登录"""
        ...skip...
            user = authenticate(username=data['username'], password=data['password'])
            if user:
                # 将用户数据保存在 session 中,实现了登录动作
                login(request, user)
        ...skip...

当 user 对象在 header.html 模板中渲染时,用户名应该是 user.username,作者的教程里前端模板里误写成了 user.name

CoreJK commented 3 years ago

不好意思,是提问者 @wangzhuooooo 写错了

shmQAQ commented 2 years ago

下拉框无法使用我把jquery通过cdn引入后正常了。

TGF-B commented 2 years ago

到这里可否展示一下目录树?

sbwww commented 2 years ago

Bootstrap 5 里将 data-toggle 属性改成了 data-bs-toggle,这边修改好就可以解决下拉框不显示的问题