1.admin的概念

# Admin是Django自带的一个功能强大的自动化数据管理界面
# 被授权的用户可以直接在Admin中操作数据库
# Django提供了许多针对Admin的定制功能

2. 配置并管理自动化界面

# 终端项目目录创建一个超级用户:python3 manage.py createsuperuser
# eg:Username:root | Email:root@root.com | Password:1234qwer
# 浏览器Admin入口:http://127.0.0.1:8000/admin
# 设置Admin界面为中文环境:项目下settings.py,LANGUAGE_CODE = 'zh-Hans'
# 简体:zh-hans | 繁体:zh-hant | 美式英语:en-us

3. 把数据库的表自动注册到admin 界面内

from django.contrib import admin

# Register your models here.

from blog.models import *

admin.site.register(User)
admin.site.register(Blog)
admin.site.register(Article)
admin.site.register(Category)
admin.site.register(Tag)
admin.site.register(UpOrDown)
admin.site.register(Comment)

4. 自定义显示字段名与表名:

# 为应用下models.py映射关系类重写__str__方法
class Article(models.Model):
title = models.CharField(max_length=32, default='Title', verbose_name="标题")
content = models.TextField(null=True, verbose_name="内容", blank=True)
# 重写__str__方法,格式化该类实例对象的表示方式
def __str__(self):
return self.title
class Meta:
verbose_name = "文章"
verbose_name_plural = verbose_name

如何创建一个验证码给用户注册的时候使用

from django.shortcuts import render, HttpResponse

from django.http import JsonResponse
from blog.checks import check_name, CheckForm
from blog.models import User from django.contrib.auth import authenticate, login # 安装Pillow模块
# 生成图片(画板)、字体(选择指定ttf并设置字体)、画笔(画点、线、字、圆)
from PIL import Image, ImageFont, ImageDraw
from io import BytesIO
import random # 定义接口规范
response_dic = {
'statue': 1,
'msg': 'ok',
'data': {}
} # 创建画板,保存在服务器本地
def save_local():
img = Image.new('RGB', (230, 32), (40, 20, 10)) # type: Image
# 本地写流
wf = open('code.png', 'wb')
# 将数据以指定格式丢给文件操作流
img.save(wf, 'png') with open('code.png', 'rb') as f:
data = f.read()
return data

创建画板,保存在服务器本地

# 随机RGB元组
def random_RGB(min, max):
return tuple([random.randint(min, max) for i in range(3)]) # 随机产生六位验证码
def random_six_code():
code = ""
# 每一位均可以为字母大写、小写或数字
for i in range(6):
tag = random.randint(1, 3) # 1:大写 2:小写 3:数字
if tag == 1:
code += chr(random.randint(65, 90))
elif tag == 2:
code += chr(random.randint(97, 122))
else:
code += str(random.randint(0, 9))
return code

随机产生六位数的验证码

# 获取验证码
def login_code(request):
# data = save_local() img = Image.new('RGB', (230, 32), random_RGB(150, 255)) # 在画板中画字
img_draw = ImageDraw.Draw(img) # 设置ImageFont字体
img_font = ImageFont.truetype('static/font/kumo.ttf', size=30) # 获取六位验证码
img_code = random_six_code()
# 将img_code存储到session中,与会话绑定,用来完成登录验证码的验证
request.session['img_code'] = img_code # 画文字:xy轴、文本、颜色、ImageFont字体
for i, ch in enumerate(img_code):
img_draw.text((30 + i * 30, 0), ch, random_RGB(0, 150), img_font) bf = BytesIO()
img.save(bf, 'png')
data = bf.getvalue() # 从内存中将数据全部取出
return HttpResponse(data)

获取验证码

# 登录
def my_login(request):
if request.method == "GET":
return render(request, 'login.html')
if request.method == "POST":
client_code = request.POST.get('img_code', None).lower()
server_code = request.session.get('img_code', None).lower()
print("client_code", client_code)
print("server_code", server_code)
if client_code != server_code:
return JsonResponse({
'statue': 2,
'msg': "验证码错误",
'data': {}
})
# 验证通过就可以进行用户登录
username = request.POST.get('username', None)
password = request.POST.get('password', None)
user = authenticate(username=username, password=password)
if user:
login(request, user)
return JsonResponse({
'statue': 1,
'msg': "登录成功",
'data': {}
})
return JsonResponse({
'statue': 2,
'msg': "登录失败",
'data': {}
})

login方法+判断验证码是否正确

from django.conf.urls import url
from django.contrib import admin
from blog import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.my_login), url(r'^register/$', views.register),
url(r'^check_username/$', views.check_username), url(r'^my_login/$', views.my_login),
# 获取验证码的GET请求
url(r'^login_code/$', views.login_code),
]

在url内设置好验证码的路径,方便ajax调用

<script>
$(".login").click(function () {
token = $('[name=csrfmiddlewaretoken]').val(); $.ajax({
url: '/my_login/',
type: 'post',
data: {
{#csrfmiddlewaretoken: '{{ csrf_token }}',#}
csrfmiddlewaretoken: token,
username: $('#username').val(),
password: $('#password').val(),
img_code: $('#img_code').val(),
},
success: function (data) {
console.log(data);
$("#login-info").modal('show');
$('#myModalLabel').text(data.msg)
} })
}) $('#code').click(function () {
{#var _this = this;#}
{#$.ajax({#}
{# url: '/login_code/',#}
{# success: function (data) {#}
{# console.log(data);#}
{# $(_this).attr('src', data)#}
{# }#}
{# })#} url = '/login_code/'; var xhr = new XMLHttpRequest();
xhr.open('GET', url, true); // url
xhr.responseType = "blob";
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var blod = this.response;
var src = URL.createObjectURL(blod); // src
$('#code').attr('src', src);
}
}
};
xhr.send(); }) </script>

前端ajax识别验证码的方法

BBS(第二天) Django之Admin 自动化管理数据页面 与创建一个用户注册的验证码的更多相关文章

  1. Django之admin中管理models中的表格

    Django之admin中管理models中的表格 django中使用admin管理models中的表格时,如何将表格注册到admin中呢? 具体操作就是在项目文件夹中的app文件夹中的admin中注 ...

  2. Django的Admin站点管理

    一.概述 内容发布:负责添加.修改.删除内容 公告访问 二.配置Admin应用 在settings.py文件中的INSTALLED_APPS中添加'django.contrib.admin',默认是添 ...

  3. django的admin后台管理

    Admin后台管理 要进入admin后台管理首先要创建管理员账户 createsuperuser 其中密码要大于8位 使用之前要到应用下的admin.py中注册要管理的模型表 from django. ...

  4. Django框架admin后台管理和用户端静态文件

    目录 一.admin后台管理 1. 如何使用 2. 路由分发的本质 二.用户上传的静态文件的展示 1. media配置 2. 手动开设media接口 三.图片防盗链 一.admin后台管理 djang ...

  5. django的admin后台管理如何更改为中文

    新建Django的admin后端控制为英文显示,为了可以使其显示中文,可以将 setting.py配置文件修改 # LANGUAGE_CODE = 'en-us' # # # # # TIME_ZON ...

  6. django学习-22.admi管理后台页面的文案展示等相关配置

    目录结果 1.前言 2.完整的操作步骤 2.1.第一步:对[settings.py]里的相关常量的值做如下修改 2.2.第二步:重启django项目[helloworld]的服务 2.3.第三步:重新 ...

  7. django 之admin后台管理

    数据库 from django.db import models from django.contrib.auth.models import User from django.contrib.aut ...

  8. 使用django的admin的后台管理界面

    django的admin后台管理界面是方便我们对数据库操作的  是一个在浏览器显示的  图形化界面数据库操作 我们先在django中的admin中把我们需要在图形化界面中进行操作的表导入进去: 先把m ...

  9. IO操作、PIL使用、Django的admin操作

    操作内存的流-StringIO | BytesIO from io import StringIO, BytesIO #创建操作字符串的内存流 sf = StringsIO() #往内存中写 sf.w ...

随机推荐

  1. [Scala] [Coursera]

    Week 1 Cheat Sheet Link Evaluation Rules Call by value: evaluates the function arguments before call ...

  2. 不得不补:PHP的JSON, SQL

    不管怎么说,还是得感谢慕课网,提供了很多免费的视频教学. 学习自: https://www.imooc.com/view/68 前端页面: <!DOCTYPE html> <html ...

  3. Fescar Example-Spring Cloud

    项目说明 本项目演示如何使用 Fescar Starter 完成 Spring Cloud 应用的分布式事务接入. 准备工作 在运行此示例之前,你需要先完成如下几步准备工作: 配置数据库 创建 UND ...

  4. idea2018+maven+web新手maven指南

    CSDN上的博主详细的很 https://blog.csdn.net/hncu1306602liuqiang/article/details/82356097

  5. 关于Ble通信库BluetoothKit的使用 以及可能出现的问题分析

    首先,这个库是用于BLE(低功耗蓝牙)通信的,地址:https://github.com/dingjikerbo/BluetoothKit 当然,也可以选择根据andorid提供的底层接口自己完成这部 ...

  6. C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 官方 ...

  7. 在Power BI报表和仪表板中显示刷新日期\时间

    有人最近问我:“如何在报告和仪表板中显示最后刷新数据的日期和时间?”这里有两个简单的技巧在这分享下,也许可以帮助到你. 显示上次刷新日期\时间 要想显示刷新的日期和时间,我们需要在模型本身中存储时间刷 ...

  8. Unity在UI界面上显示3D模型/物体,控制模型旋转

    Unity3D物体在UI界面的显示 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  9. $\mathcal{OI}$生涯中的各种数论算法的证明

    嗯,写这个是因为我太弱了\(ORZ\). #\(\mathcal{\color{silver}{1 \ \ Linear \ \ Sieve \ \ Method \ \ of \ \ Prime}} ...

  10. maven整合ssh框架笔记

    具体工程会上传文件sshpro <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:x ...