0x0a、如何设置后台管理的标题、copyright、换肤功能(这个是基于xadmin的)
可以通过在任何一个app里面的adminx里面增加下面这些代码即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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) # 这两个千万别打错、别继承错,不然就是设置无效
|
0x0b、Django前端路由的注意事项
- 路由加“/”和不加的区别:
1 2 3 4 5 6 7
| # 情况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/ |
- 顺带说一下,Django提供了一个很方便的使用方法,可以减少后期的维护工作量,方便开发者随意变更url地址(即便如此,也希望各位尽量少变更,避免出现异常/未全部同步更改的情况)
1 2 3 4 5
| # 情况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了,方便后期的维护
1
| <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")
即可达到你的目的
如用户的登录操作,可以定义得以一个form来校验
1 2 3 4 5 6 7
| 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)
|
使用方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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
字段里面带有下面这种用法的:
1 2 3 4 5 6 7
| {% if login_form.errors %} {% for key,error in login_form.errors.items %} {{ error }} {% endfor %} {% else %} {{ msg }} {% endif %}
|
就是可以直接提取/使用错误信息,直接返回到前端展示。
与此同时,还能够将前端的输入框做校验,选中提示是哪个字段出现异常,详情请看下边的完整的form表单的代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <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>
|
感谢认真读完这篇教程的您
先别走呗,这里有可能有你需要的系列文章:
Django踩坑记录系列;