kelovp.
首页 Python Django 后台搭建 ORM 和 利用Admin

Django 后台搭建 ORM 和 利用Admin

为了毕业设计喵!

    这次后台选取了Django(因为有完整的后台Admin和Basic Auth验证,可以帮我稍微干掉一些生产环境的坑。)话不多说,先在Windows下开发。

一:环境搭建

   其实这个得注意一件事情:环境变量的配置

    1.python 安装(我已经备好Py3.5)

    2.pip install django (注意下版本 我1.9)

    3.pycharm偷懒。直接创建一个Django项目

二:目录解释

  你在创建项目之后在项目模块下面会有两个文件夹:

 emmm,上面那个文件夹,掌控雷电,控制着项目的配置和对外输出 其中的初始化文件则是在运行的时候就会加载,而setting则是项目的一些配置,urls里面包含了对外输出的一些路径配置

 那个templates 就是传说中模板,用于页面

 底下的那个文件夹,包括了admin(就是Admin功能的模块管理) apps注册器,models在我认知里和java的Mapper一样,但更为生猛,serializers我创建的为了json输出的序列化文件, tests顾名思义测试用类 view…可以理解为Service吧 migrantinons里面便是model的管理初始化。

三:ORM 

    不跟你多说,起手创建mapper啊,奥不,创建模型啊:

# Create your models here.

Response Body Models in Here

from django.db import models from pygments.lexers import get_all_lexers from pygments.styles import get_all_styles #顶上这俩import用于代码高亮的,我导进来发现没什么用 xd..

class product(models.Model): id = models.AutoField(primary_key=True) no = models.CharField(max_length=20,blank=False) #no name = models.CharField(max_length=60,blank=True) comment = models.CharField(max_length=512,blank=True) code = models.CharField(max_length=256,blank=False) updateTime = models.DateTimeField(auto_now=True) creatTime = models.DateTimeField(auto_now_add=True)

    对了,这里的Field类型很容易理解的,摸摸就搞定了->   

    好 创建好模型之后记得在Setting里填一下你的app名字,不然后面会告诉你出问题的:

INSTALLED_APPS = [ ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django.contrib.messages’, ‘django.contrib.staticfiles’, # USE OWN PART ‘tools’, ]

     完事之后配置下DB :

# Database

https://docs.djangoproject.com/en/1.11/ref/settings/#databases

Django the default Database is SQLite,So I use MySQL

DATABASES = { ‘default’: { # ‘ENGINE’: ‘django.db.backends.sqlite3’, # ‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),

text
    # local DB perproties:
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'qrcode',
    'USER': 'root',
    'PASSWORD': '699307',
    'HOST': '127.0.0.1',
    'PORT': '3306',
}

}

     因为py3 用MySQL会import出错,记得在项目初始化的时候填一句:

import pymysql

to site py2-3

pymysql.install_as_MySQLdb()

     搞定这些之后可以打开pycharm的terminal: python mange.py 

python manage.py makemigrations python manage.py migrate

     然后就会生成本项目相关的表,也会创建好你model里面class对应的DB

    其实此刻你已经可以去view写你的操作了,但是因为毕设的需求,我需要管理员去做这个事情:遂改造Admin:

#Regist in @admin.register(product) class ProductAdmin(admin.ModelAdmin): list_display = (‘id’,‘no’,‘name’,‘comment’,‘code’,‘updateTime’) list_per_page = 20 list_editable = [‘name’] list_display_links = (‘id’, ‘no’) ordering = (‘-id’,) search_fields =(‘name’,‘id’)

text
#Set User Pro
def get\_readonly\_fields(self, request, obj=None):
    """  READ ONLY """
    if request.user.is\_superuser:
        self.readonly\_fields = \[\]
    return self.readonly\_fields

readonly\_fields = ('id', 'no', 'code', 'updateTime', 'creatTime')

#when inner new product
def save\_model(self, request, obj, form, change):
    if change:
        pass
    else:
        nos  = views.GET\_GOOD\_NO()
        codes = views.GET\_MD5\_CODE(nos)
        obj.no = nos
        obj.code = codes
    super(ProductAdmin, self).save\_model(request, obj, form, change)

     我这样写的目的是让普通只有读写权限的人可操作的字段减少,于此同时在增删改查的时候必须通过登陆来做事,而且我里面有两列是自动生成的,所以就写成这样了。

    完成这些之后 创建一个超级用户,登陆进去,再添加一个普通用户,赋予他对product的操作权限,但取消他作为组管理的权限,到此该部分结束,根据毕设要求我得有一个展示页面:

    页面核心:

{% load pagination\_tags %} {% autopaginate products 10 %} {% for product in products %} {{product.id}} {{product.name}}  {{product.comment}}  {{product.creatTime}}  Open QR-Code   {% endfor %} {% paginate %}

     在这里我做了一下分页,通过安装插件完成,前端继续使用我们最好的 朋友UIKIT3

     最后配置URL:

url(r’^admin/’, admin.site.urls), #QR_CODE —index url(r’^product/qrcode/(.+)$’, views.generate_qrcode, name=‘qrcode’), url(r’^product/index.html’, views.index, name=‘index’),

    到此基础数据的增删改查已经OK

K
kelovp
后端工程师 · 广告投放 / 商业化
八年后端,做广告投放与商业化变现系统,现在带团队折腾商业化中台与 AIGC 内容平台。工作之外写点电子音乐、动漫解析和故事。相信把事情想清楚,才写得明白。