Django 后台搭建 ORM 和 利用Admin - KelovpString

/ 0评 / 0

    为了毕业设计喵!

    这次后台选取了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'),

        # 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')

    #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的操作权限,但取消他作为组管理的权限,到此该部分结束,根据毕设要求我得有一个展示页面:

    页面核心:

 <tbody>
        {% load pagination_tags %}
        {% autopaginate products 10 %}
	    {% for product in products %}
	        <tr>
             <td class="uk-table-small ">{{product.id}}</td>
             <td class="uk-table-link">{{product.name}}</td> 
             <td class="uk-text-truncate">{{product.comment}}</td> 
             <td class="uk-text-nowrap">{{product.creatTime}}</td>
                <td class="uk-table-small uk-text-right">
                <a class="uk-margin-small-right uk-button uk-button-secondary " href="#modal-media-image" uk-toggle>
                    <span uk-icon="icon: image"></span> Open QR-Code</a>
                </td>
            </tr>
            <div id="modal-media-image" class="uk-flex-top" uk-modal>
                <div class="uk-modal-dialog uk-width-auto uk-margin-auto-vertical">
                <button class="uk-modal-close-outside" type="button" uk-close></button>
                <img src="qrcode/{{ product.code }}" alt="">
                </div>
            </div> 
        {% endfor %}
    	{% paginate %}
    	</tbody>

     在这里我做了一下分页,通过安装插件完成,前端继续使用我们最好的 朋友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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注