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. 环境搭建、RF库

    一.Python27安装 1.双击安装python-2.7.13-64位.msi 2.检查python:cmd命令行→[python]→回车,出现如图所示,表示成功 可能出现:'python'不是内部 ...

  2. Unable to resolve module crypto

    Add rn-nodeify to your devDependencies in package.json: "devDependencies": { "rn-node ...

  3. C语言笔记1

    第一部分 计算机常识 1,人与计算机交流 2,人机交互方式 3,计算机的组成结构 4,计算机的系统组成 5,进制 6,程序和指令  第二部C开发环境 1 人与计算机交流 现实中人与人交流靠语言,那么人 ...

  4. Centos 安装 python2.7.10以及pip

    安装python2.7.10 1. 下载安装包并解压 wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz tar -xf P ...

  5. django模型系统一

    django模型系统一 1.数据库的连接配置 django连接mysql的配置流程 安装pymysql       **  pip install pymysql 修改配置 修改setting的配置文 ...

  6. MVC 模式

    1.MVC 模式简介 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发.Model(模型):模型代表一个存取数据的对象或 JAV ...

  7. Xilinx 7 series FPGA multiboot技术的使用

    Xilinx 7 series FPGA multiboot技术的使用 当升级程序有错误的时候,系统会启动golden bitstream 注意:需要在源工程与升级工程中添加如下约束语句 生成组合mc ...

  8. Excel技巧--分隔工资条

    要将上图的工资表,做成每行都带标题而且有空行间隔的工资条,可以这么做: 1.表格右侧添加一列数据列:输入1,2,选定,并双击单元格右下角形成一升序数字列: 2.再将该列复制,粘贴到该列末尾: 3.点一 ...

  9. 加密与解密md5 3des

    /// <summary> /// MD5加密 /// </summary> /// <param name="s"></param> ...

  10. 减小delphi体积的方法

    1.关闭RTTI反射机制  自从Delphi2010中引入了新的RTTI反射机制后,编译出来的程序会变得很大,这是因为默认情况下 Delphi2010 给所有类都加上了反射机制.而我们的工程并不每每都 ...