Python+Django知识点总结

导读:本篇文章讲解 Python+Django知识点总结,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

  下面是自己学习过程中的一些知识点,需要的可以看看,本人还是一个小菜鸟,由于需要就学习一下用Django框架还写个Web试试:

1:运行服务器:python manage.py runserver 8080   (可以指定端口也可以用默认的8000,不写)

2:进行数据库的迁移:python manage.py makemigrations
3:实施数据库迁移:python manage.py migrate
4:进入shell模块:python manage.py shell
5:创建Django管理模块:python manage.py createsuperuser

6:向admin注册Django的模型(在项目中的admin.py文件进行设置):

from MyDjango.models import *

admin.site.register(BookInfo)


7:设置在后台显示所要显示的字段(在admin.py文件中进行设置):


class BookInfoAdmin(admin.ModelAdmin):

list_display = [这里面写要显示的字段名就可以了],比如list_display = [‘id’ , ‘btitle’ , ‘bpub_date’];    #在admin显示的字段名

list_filter = [‘btitle’ ]  #设置个过滤器,也就是显示到页面的右边,方面进行搜索

list_per_page = 10            #设置每个页面显示的数据的条数

search_fields = [‘btitle’]   #设置搜索框的列表

 然后再将这个list注册到6中就可以了:admin.site.register(BookInfo ,BookInfoAdmin )

或者上面用装饰器的方法也行,在类前面写@admin.register(BookInfo)

设置Admin站点显示为中文和时区(在setting.py)中设置为:LANGUAGE_CODE=‘zh-hans’   和TIME_ZONE=‘Asia/Shanghai’

设置内嵌类(就是在增加某个数据表的时候,将内嵌的类的内容也可以进行添加):

比如: class neiqian (admin.TabularInline):

model = scord      #对应要内嵌的数据库表

class studentAdmin(admin. ModelAdmin):

inlines = [  neiqian ]   #对应要内嵌的类

8:安装mysql驱动:python install mysqlclient
9:使用mysql在Django的setting.py中进行设置:


DATABASES = {

    ‘default’: {

        ‘ENGINE’: ‘django.db.backends.mysql’,

        ‘NAME’: ‘djangodb’,

        ‘USER’:’root’,

        ‘PASSWORD’:’mao15897610067′,

        ‘HOST’:’localhost’,

        ‘PORT’:’3306′,

    }

}

10:进入Python的shell控制,来进行编写代码:


           python manege.py shell
11:URL的正则表达式匹配:



(1):匹配数字:[0-9]或者\d


(2):匹配多个数字:[0-9]+ 或者\d+

12:将session进行存储(在Setting.py文件中设置)


   (1)设置存储到数据库中:SESSION_ENGINE=’django.contrib.sessions.backends.db’

   (2)设置存储到内存中:SESSION_ENGINE=’django.contrib.sessions.backends.cache’

   (3)设置存储到内存和数据库中:SESSION_ENGINE=’django.contrib.sessions.backends.db_cache’


13:在 view.py 文件中,
    (1)引用Http模块:from django http import  *;
    (2)引用modele模块: from .modele import * ;



14: 配置csrf验证,在表单中:{% csrf_token %}
15:配置静态文件的存储(在setting.py文件下):



STATIC_URL = ‘/static/’  (这个一般都会默认已经写好)


STATICFILES_DIRS=[os.path.join(BASE_DIR,’static’)]

    其中的那名字的话,一般是叫做”static”,当然你可以进行修改的,只是创建的名字要和这个对应就可以了,默认一般都是用这个名字的话比较好。然后在目录下创建对应的static文件夹,再在下面创建与应用一样的文件夹即可(当然针对不同的静态文件,还目录下还可以创建子目录方便管理,比如js , css , img等)。


16:在模版中引用static文件下面的图片


(1)方法一:使用绝对路径进行使用,例如:<img src = “/static/MyDjango/a1.png”>


(2)方法二:使用动态的方式进行使用:例如<img src = “{% static ‘MyDjango/a1.png’ %}”>



其中,上面的MyDjango是我应用的名字
方法二的好处在于:这个地址不会被随意发现,而且不容易随着设置的名字的不同而产生影响,具有动态性。
方法二的注意点就是要在模版的开始引用下面的一句话:
<% load static from staticfiles %>



17:使用Django中的中间件:


作用:用来干扰整个的url的请求(一种面向切面编程的思想,类似spring当中的IOC和DI(控制反转)):


使用方法:在setting.py中的中间件的位置进行添加设置,比如:


(1)在app目录下创建一个.py的类,比如创建了MyException.py


(2)创建一个类,比如 


from django.http improt *


class MyExceptionHappend():


def process_exception(request , response , exception):


return HttpResponse(exception.message);

     这里就简单点的用一个方法做演示,其中的作用就是当发生了访问view出现异常的时候,把异常进行打印出来


(3)在setting.py 中进行添加设置,即MIDDLEWARE_CLASSES=(‘MyDjango/Exception.MyExceptionHappend’)


切记:中间件中只有如下的五个方法能够被使用


(1)干扰URL之前:使用process_request()方法


(2)干扰view之前:使用process_view()方法


(3)干扰view执行后,也就是templete之前:使用process_template_resonce()


(4)当在执行视图发生异常:使用process_exception()方法


(5)在templlate之后:使用process_response()方法

18:上传图片(文件)步骤:


(1)首先需要在models类中进行设置相应的图片属性的字段,比如myimg = models.ImgField(upload_to=’cars/’)


    在上面中,设置了,上传的图片会被传到cars/这个目录下(可以自己进行设置)


(2)如果django中还没有下载Pillow的这个东西的话,需要先进行下载,方式为在cmd中,pip install Pillow==3.4.1


    版本至少要为3.4.1以上,因为之前的还没有支持图片的存储


(3)由于上传的图片会被配置到服务器目录中的staitc目录下的media下,这个目录就是用来专门针对上传的资源进行管理,


    所以需要在setting.py中进行设置一个为:MEDIA_ROOT = os.path.join(BASE_DIR , “static/media/”)


(4)在static目下下,创建一个media目录,以后这个目录就是默认存储上传的文件

注意点:在进行提交图片或者文件的HTML中的input标签中,类型是file,而且这个from表单必须有enctyoe = “multipart/from-data”这个属性


比如:<from action=” ” method=”post” enctyoe = “multipart/from-data”>否则不能进行提交到服务器接受

     
例子:(1)上传图片的HTML

<!DOCTYPE html>


<html lang=”en”>


<head>

   
<meta charset=”UTF-8″>

        <title>上传图片或者文件</title>

</head>

<body>

    <form action=”/index/picturehandle/” method=”post” enctype=”multipart/form-data”>

        {% csrf_token %}

        <lab>请选择要上传的文件</lab>

        <input type=”file”  name = ‘picl’><br>

        <input type=”submit” value=”上传” name=”submit”>

    </form>

</body>

</html>



(2)下载传送的内容的view方法:

#测试文件上传之后的处理

def picturehandle(request):

    #拿到上传过来的文件

    picture = request.FILES[‘picl’];

    #拼凑保存到服务器中文件的名字

    filename = os.path.join(settings.MEDIA_ROOT , picture.name)

    #解析传过来的图片并且写到服务器对应的目录media下

    with open(filename , ‘wb+’) as readcontent:   #注意这里的读取方式要为’wb+’,否则会有问题

        for con in picture.chunks():  #这是读取的方式

            readcontent.write(con);

    #将服务器中存储的图片进行显示

    return HttpResponse(‘<img src = “/static/media/%s”>’%picture.name);

19:template继承:

(1)定义需要填充的内容:{% block   content %}  {% endblock content%}   #这样的话,在继承的页面直接填充这里面的内容就会被替换成对应的内容

(2)需要在template最开始写继承的页面:比如:{% extends ”myhtml/base.html”%}

20:分页内容

对象:Paginator,管理数据分为多少页

对象: Page,管理某一个页的内容

用法例子:

(1)view.py中

#测试分页操作
def showDBList(request):
     #得到要显示的数据
     list = BookInfo.objects.all();
     #得到分页的对象,并且将查询到的数据分为4页
     paginator = Paginator(list , 4);
     #得到要进行显示的页数
     index = request.GET.get('pagenumber');
     #判断请求中是否有传过来的页面数,如果没有则表示是第一次访问,即默认访问第一页
     if index == None :
         index = 1;
     # 得到管理每一页的对象Page
     page = paginator.page(index)
     context ={'page': page};
     return render(request , 'MyDjango/showlistdate.html' , context);

(2)urls.py中

 url(r'^showdblist' , views.showDBList),

(3)templates中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>显示分页内容</title>
</head>
<body>
<center>
<ul>
    <!-- 得到对应页中的每个数据对象-->
    {%   for everypage in page %}
       <li> {{ everypage.btitle }}</li>
    {% endfor %}
</ul>
<hr>
    <!--显示对应的页码数-->
    {%  for index in  page.paginator.page_range %}
        <!-- 如果显示的是当前页码的内容,则将页码变色-->
        {% if index == page.number %}
            <a style="color: red">{{ index }} </a>  
            {% else %}
            <!--将点击的页码传送过去,方便显示对应的内容-->
            <a href="/index/showdblist?pagenumber={{ index }}" style="color: green">{{ index }}</a>  
        {% endif %}
    {% endfor %}

</center>
</body>
</html>

21:python读取和写入数据Excl表格

def readUserInfomationFile(request , filename):
    #写服务器的上传过来的文件路径
    webFileName = os.path.join(settings.MEDIA_ROOT, filename)   //这是自己在Django服务器中读取的一个Excl路径
    # 打开文件
    workbook = xlrd.open_workbook(r''+webFileName)    //如果要读本地的Excl,那么路径可以写,例如:(r'F:\demo.xlsx')
    # 获取所有sheet
    #workbook.sheet_names()
    #获取第一个sheet名字
    sheet2_name = workbook.sheet_names()[0]
    # 根据sheet索引或者名称获取sheet内容
    sheet2 = workbook.sheet_by_index(0)  # sheet索引从0开始,第一个sheet就是为0,因为一个excl表里面可以有多个sheet
    # sheet2 = workbook.sheet_by_name('sheet2') #这是直接通过名字进行获取

    # sheet的名称,行数,列数
    print (sheet2.name, sheet2.nrows, sheet2.ncols)

    # 获取指定的整行和整列的值(返回的是数组类型)
    rows = sheet2.row_values(3)  # 获取第四行内容
    cols = sheet2.col_values(2)  # 获取第三列内容
    print (rows)
    print (cols)

    # 获取指定某个单元格内容(三种方法)
    print (sheet2.cell(1, 0).value)
    print (sheet2.cell_value(1, 0))
    print (sheet2.row(1)[0].value)
    # 获取单元格内容的数据类型
    #ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
    print (sheet2.cell(1,0).ctype)

提供两篇博客供大家共享:

(1)http://blog.csdn.net/wangkai_123456/article/details/50457284

(2)http://www.jb51.net/article/60510.htm

22:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/12447.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!