zoukankan      html  css  js  c++  java
  • django初体验

     首先看了一遍官方的小例子,发现是标准的mvc结构,不懂mvc结构的自行了解

    如何创建项目文档里有,包括一些数据库迁移等,由于我用的是django2.1最新版,python用3.6,只是走一下最简单的增删改差

    首先安装django:
    pip install django

    创建项目:
    django-admin startproject mysite
    自动创建的每个文件官方文档自行了解

    下面来说说我遇到的坑:

     

     由于我将mysql服务搭在本地的虚拟机上,
    所以settings.py的databases的配置是这样的

        DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'djangodb',
            'HOST': '192.168.175.130',
            'USER': 'root',
            'PASSWORD': '123456',
            'CHARSET': 'latin1',
        }
        }

     然后当然要创建model了,
    然后我的model是这样的

    class Images(models.Model):
        rid = models.IntegerField()
        link = models.CharField(max_length=255)
        cid = models.SmallIntegerField()
        title = models.CharField(max_length=255)
        backup = models.TextField()
    
        def __str__(self):
            return self.title

    我的apps.py

    class MyadminConfig(AppConfig):
        name = 'myadmin'

    然后settings.py中导入app

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog.apps.BlogConfig',
        'myadmin.apps.MyadminConfig',
    ]

     然后运行:

    manage.py makemigrations myadmin
    从log中猜测这步应该是通过model生成建表sql,当然肯定没有这么简单

    然后执行:
    manage.py migrate
    这条命令会创建表,然而发现没有MySQLdb的库,那当然要装了,pip install python-mysql ,发现装不上,各种报不同类型的错,通过查文档发现python3.6已经没有这个模块了,我们需要安装pymysql,
    然后在settings.py中加入一行
    import os, pymysql
    pymysql.install_as_MySQLdb()

    然后就没问题了,一切顺利,然后就是写views和tmplates了

    我的index.html

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
              integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
              integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
        <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js
    "></script>
        <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
        <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"
                integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
                crossorigin="anonymous"></script>
        <style>
            .nav-h {
                background-color: aqua;
            }
    
            .nav-l {
                background-color: #fff;
            }
    
            .nav-container {
                /*background-color: #cccccc;*/
            }
        </style>
    </head>
    <body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-12 nav-h">
                <p>top</p>
            </div>
            <div class="col-md-2 nav-l">
                <p>left</p>
            </div>
            <div class="col-md-10 nav-container">
    
                <div class="row">
                    <!-- Button trigger modal -->
                    <button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
                        ADD
                    </button>
                </div>
                <!-- Modal -->
                <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
                    <div class="modal-dialog" role="document">
                        <div class="modal-content">
                            <div class="modal-header">
                                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
                                        aria-hidden="true">&times;</span>
                                </button>
                                <h4 class="modal-title" id="myModalLabel">Modal title</h4>
                            </div>
                            <div class="modal-body">
                                <form id="form-form" class="form-horizontal" action="{% url 'myadmin:ImageAdd' %}"
                                      method="post"
                                      enctype="multipart/form-data">
                                    <input type="hidden" name="rid" value="1">
                                    <input type="hidden" name="cid" value="1">
                                    {% csrf_token %}
                                    <div class="form-group">
                                        <label class="col-sm-2 control-label">标题</label>
                                        <div class="col-sm-10">
                                            <input type="text" class="form-control" name="title">
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-sm-2 control-label">备注</label>
                                        <div class="col-sm-10">
                                            <input type="text" class="form-control" name="backup">
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-sm-2 control-label">图片</label>
                                        <div class="col-sm-10">
                                            <input type="file" class="form-control" name="img">
                                        </div>
                                    </div>
                                </form>
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                <button type="button" class="btn btn-primary" id="form-submit">Save changes</button>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="row">
    
                    <table class="table table-hover">
                        <tr>
                            <th>rid</th>
                            <th>title</th>
                            <th>cid</th>
                            <th>backup</th>
                            <th>img</th>
                            <th>操作</th>
                        </tr>
                        {% for i in data %}
                        <tr>
                            <th>{{i.rid}}</th>
                            <th>{{i.title}}</th>
                            <th>{{i.cid}}</th>
                            <th>{{i.backup}}</th>
                            <th><img src="{{i.link}}" style=" 50px;" alt=""></th>
                            <th>
                                <button class="btn btn-success edit" data-id="{{i.id}}" data-title="{{i.title}}"
                                        data-backuo="{{ i.backup}}">编辑
                                </button>
                                <button class="btn btn-danger del" data-id="{{i.id}}">删除</button>
                            </th>
                        </tr>
                        {% endfor %}
                    </table>
                </div>
    
            </div>
        </div>
    </div>
    </body>
    <script>
        $('#form-submit').click(function () {
            $('#form-form').submit();
        })
        $('.del').click(function () {
            var th = $(this)
            var data_id = th.attr('data-id')
            var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val()
            console.log(csrftoken)
            $.ajax({
                beforeSend: function (xhr, settings) {
                    xhr.setRequestHeader("X-CSRFToken", csrftoken);
                },
                url: "{% url 'myadmin:ImageDel' %}",
                data: {id: data_id},
                type: 'post',
                dataType: 'json',
                success: function (data) {
                    if (data.code){
                        alert('删除成功')
                    }else{
                        alert('删除失败')
                    }
                    location.reload()
                }
            })
    
        })
    </script>
    
    </html>

    我的urls.py

    from django.urls import path
    from . import views
    
    app_name = 'myadmin'
    urlpatterns = [
        path('', views.index, name='index'),
        path('images/index', views.ImageIndex, name='ImageIndex'),
        path('images/addImage', views.ImageAdd, name='ImageAdd'),
        path('images/ImageDel', views.ImageDel, name='ImageDel')
    ]

    我的views.py

    from django.shortcuts import render
    from django.http import HttpResponse, Http404, HttpResponseRedirect, JsonResponse
    from django.urls import reverse
    from .models import Images
    import os, uuid
    
    
    # Create your views here.
    
    def index(request):
        return HttpResponse('hello myadmin')
    
    
    def ImageIndex(request):
        I = Images.objects.all()
        context = {"data": I}
        return render(request, 'Images/index.html', context)
    
    
    def ImageAdd(request):
        rid = request.POST.get('rid', None)
        cid = request.POST.get('cid', None)
        title = request.POST.get('title', None)
        print(title)
        backup = request.POST.get('backup', None)
    
        link = uploadFile(request.FILES['img'])
    
        I = Images(rid=rid, cid=cid, title=title, backup=backup, link=link)
        I.save()
        if I.id is None:
            raise Http404
        return HttpResponseRedirect(reverse('myadmin:ImageIndex'))
    
    
    def ImageDel(request):
        id = request.POST.get('id', None)
        if id is None:
            return JsonResponse({'code': 0})
        try:
            I = Images.objects.get(pk=id)
            I.delete()
        except Exception as e:
            return JsonResponse({'code': 0})
        else:
            return JsonResponse({'code': 1})
    
    
    def uploadFile(f):
        path = '/images/'
        baseLink = 'http://127.0.0.1:81/'
        if not os.path.exists(path):
            os.mkdir(path)
        filename = str(uuid.uuid1()) + f.name
        saveFile = path + filename
        with open(saveFile, 'wb+') as sf:
            for trunk in f.chunks():
                sf.write(trunk)
        return baseLink + filename

    都是比较简陋,没有做任何的异常处理,就写了一个增和删其他就不想写了

    值得注意的是:

      由于我没有设置数据库的字符集导致出现1366, "Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95' for column 'title' at row 1"这个报错

    我看了一下数据库的设置:

    mysql> show variables like '%char%';

    果然很多默认的都是latin1,发现我的表也是Latin1,然后我当然不想改数据库了,就去找model能不能设置字符集,应该数据库连接是可以设置字符集的,并没有找到,谁找到了告诉我一下,这个是非常坑的,并不是所有线上环境都是utf8的
    然后我只能退而求其次了,改数据库,如何改请戳这里,https://www.cnblogs.com/HondaHsu/p/3640180.html,然后插入中文都ok了
    弄到这里就不想用了,初步感觉这个框架功能虽然全,但是有点笨重,想要深入有点难度,所以下一步准备撸一下flask


  • 相关阅读:
    命令模式(Command Pattern)
    外观模式(Facade Pattern)
    Hash函数的安全性
    单向散列函数
    装饰者模式(Decorator Pattern)
    尝试设计LFSR加密器,并用CAP4验证随机性
    对称密码-流密码
    组合模式(Composite Pattern)
    桥接模式(Bridge Pattern)
    适配器模式(Adapter Pattern)
  • 原文地址:https://www.cnblogs.com/leescre/p/9630176.html
Copyright © 2011-2022 走看看