django踩坑记录(3)

0x0a、如何设置后台管理的标题、copyright、换肤功能(这个是基于xadmin的)

可以通过在任何一个app里面的adminx里面增加下面这些代码即可:

class GlobalSettings(object):
    """设置后台管理系统的名字及页底的copyright"""
    site_title = "慕学后台管理系统"
    site_footer = "慕学在线网"


class BaseSettings(object):
    """设置Django换肤功能"""
    enable_themes = True
    use_bootswatch = True


xadmin.site.register(xadmin.views.CommAdminView, GlobalSettings)
xadmin.site.register(xadmin.views.BaseAdminView, BaseSettings)  # 这两个千万别打错、别继承错,不然就是设置无效

设置自定义的页面属性,后台管理显示的字段,copyright,换肤功能

0x0b、Django前端路由的注意事项
  1. 路由加“/”和不加的区别:
# 情况1
path('login/', TemplateView.as_view(template_name="login.html"), name="login")



# 情况2
path('login', TemplateView.as_view(template_name="login.html"), name="login")
字段结果
情况1前端访问http://127.0.0.1:8000/login/或者http://127.0.0.1:8000/login这个地址都是可以找的到的
情况2只能访问http://127.0.0.1:8000/login;不能访问http://127.0.0.1:8000/login/
  1. 顺带说一下,Django提供了一个很方便的使用方法,可以减少后期的维护工作量,方便开发者随意变更url地址(即便如此,也希望各位尽量少变更,避免出现异常/未全部同步更改的情况)
# 情况3
path('login/', TemplateView.as_view(template_name="login.html"), name="login")

# 情况4
path('login/', TemplateView.as_view(template_name="login.html"))

情况3和情况4其实就是在于name="login",你可以理解为,在这里为这个url的地址额外添加一个名字,这个名字就是叫"login",然后你每次叫这个名字的时候,其实都是叫他前面填的这个"login/"。

然后在前端页面里面,这样来使用这个url的名字,就可以做到不用写死url了,方便后期的维护

<a style="color:white" class="fr loginbtn" href="{% url 'login' %}">登录</a>

例如:你想修改登录的url为http://127.0.0.1:8000/login23/,那么你只需要修改代码为path('login23/', TemplateView.as_view(template_name="login.html"), name="login")即可达到你的目的

0x0c、自定义form表单校验数据(继承Django的form来书写)

如用户的登录操作,可以定义得以一个form来校验

from django import forms


class LoginForm(forms.Form):
    """继承Django默认的form"""
    username = forms.CharField(required=True, min_length=3)
    password = forms.CharField(required=True, min_length=6)

使用方式:

from users.forms import LoginForm

login_form = LoginForm(request.POST)
        if login_form.is_valid():
            username = login_form.cleaned_data["username"]  # 重点是这种用法,是这样从form里面提取对应字段的值
            password = login_form.cleaned_data["password"]

            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return HttpResponseRedirect(reverse("index"))
            else:
                return render(request, "login.html", {"msg": "用户名或者密码错误", "login_form": login_form}) 
        else:
            return render(request, "login.html", {"login_form": login_form})  # 这个会自动校验,并且将错误的信息返回

如果校验失败,那么返回的login_form字段里面带有下面这种用法的:

{% if login_form.errors %}
    {% for key,error in login_form.errors.items %}
        {{ error }}
    {% endfor %}
{% else %}
    {{ msg }}
{% endif %}

就是可以直接提取/使用错误信息,直接返回到前端展示。

与此同时,还能够将前端的输入框做校验,选中提示是哪个字段出现异常,详情请看下边的完整的form表单的代码示例:

<form class="tab-form" action="{% url 'login' %}" method="post" autocomplete="off" id="form1">
    <div class="form-group marb20 {% if login_form.errors.username %}errorput{% endif %}">
        <input name="username" id="account_l" value="{{ login_form.username.value }}" type="text" placeholder="手机号/邮箱" />
    </div>
    <div class="form-group marb8 {% if login_form.errors.password %}errorput{% endif %}">
        <input name="password" id="password_l" value="{{ login_form.password.value }}" type="password" placeholder="请输入您的密码" />
    </div>
    <div class="error btns login-form-tips" id="jsLoginTips">{% if login_form.errors %}{% for key,error in login_form.errors.items %}{{ error }}{% endfor %}{% else %}{{ msg }}{% endif %}
    </div>
    <div class="auto-box marb38"><a class="fr" href="forgetpwd.html">忘记密码?</a></div>
    <input class="btn btn-green" id="jsLoginBtn" type="submit" value="立即登录 > " />
    {% csrf_token %}
</form>
感谢认真读完这篇教程的您

先别走呗,这里有可能有你需要的系列文章:

1、Django踩坑记录系列
2、或者点击我的个人博客进行查看这系列文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值