zoukankan      html  css  js  c++  java
  • Django笔记(二)

    1.当启动项目的时候,有多个文件,其中只有一个是Django,要让pycharm识别,可以进行设置

    第一步:File--setting

     第二步:

     这样pycharm就能识别这个文件是Django

    2.在写一个新的功能的时候,先在views里面写逻辑语句,然后到urls里面配置url,最后在html中修改获取的参数,还有会用到(例如点击某个分类展示所有的文章)

    def category(request,id):
        category_obj=models.Category.objects.filter(id=id).first()#是一个对象的数组,要取第一个数据,然后取其中的某个数据要用.name等
        articles=models.Article.objects.filter(category_id=id)
        return render(request,'category.html',{'articles':articles,'category_obj':category_obj})

    当views里的函数有参数的时候,urls里面也要带上参数

    path('category/<int:id>', views.category),#用尖括号代表url后面跟的是什么样的参数

    3.前端代码的重复利用和后端代码的重复利用

    前端代码复用代码:采取的方式是:先建立以个base页面将所有的共用的body、css、js放在页面上,在要扩展或个个页面不一样的地方,留一个接口,方便其他的页面复用

    <link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
        <link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
        <script src="/static/js/headroom.min.js"></script>
        <!-- blog CSS -->
        <link href="/static/css/base.css" rel="stylesheet">
        {% block css %}#可以咋具体的页面增加页面独有的css样式
        {% endblock %}
     <div class="row">
                {% block content %}#在body里添加具体的页面内容,可以有多个,但是名字不能重复
                {% endblock %}
    <script>
        $(function () {
            var myElement = document.querySelector(".blog-navbar");
            var headroom = new Headroom(myElement);
            headroom.init()
        });
    </script>
    <script src="/static/js/base.js?v=20191123.0909890"></script>
    {% block js %}#具体的页面增加特有的js
    {% endblock %}

    后端代码的重复利用:添加一个叫上下文本器,使用上下文本器的时候需要导入(写几个方法就需要写几个导入)不能忘记。

    EMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'templates')],#寻找到放HTML的地址
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                    'user.content_process.content_process',
                    'user.content_process.process_title',#上下文管理器要配置
                ],
            },
        },
    ]
    from . import models
    def content_process(request):#把后端都用到的代码放在上下文本器中
        categories = models.Category.objects.all()
        return {'categories':categories}
    
    def process_title(request):
        web_site=models.WebSite.objects.all().first()
        return {'web_site':web_site}

    使用上下文管理器,代码的执行过程,首先执行views里面的代码,然后templates里面时候有上下文管理器,有的话再执行里面的代码,返回给views,再执行urls,最后修改前端的代码

    4.前端把数据写到后台有两种方式:同步form形式和异步ajax形式

    5.request里有哪些方法

       print(request.method) #请求方式
        print(request.GET)# url?key=vlauye
        print(request.POST)#url  key-vlaue
        print(request.COOKIES)
        print(request.path_info)  #请求的路径 /post /cate
        print(request.FILES) #获取文件
        print(request.META) #请求头相关的都在这里
        print(request.body) #body里面的内容

    应用:获取前端页面的内容,写进数据库

    def article(request):
        if request.method=='GET':
            return render(request,'post.html')
        else:
            title = request.POST.get('title')
            content = request.POST.get('content')
            category = request.POST.get('category')
            models.Article.objects.create(title=title,content=content,category_id=category)
            return HttpResponseRedirect('/')

    6.使用Django自带的后台管理,快速的插入数据

    进入django自带的后台管理:

    首先进入django项目里

    创建账号和密码

    然后登录到后台http://127.0.0.1:8000/admin/,输入刚刚注册用户名和密码登录

    在models里面新建一张表结构,然后到admin.py中register

    class user_info(models.Model):
        name=models.CharField(verbose_name='用户名',max_length=15,unique=True)
        nick=models.CharField(verbose_name='昵称',max_length=20)
        passwd=models.CharField(verbose_name='密码',max_length=10)
        createTime=models.DateTimeField(verbose_name='创建时间',auto_now_add=True)
        updateTime=models.DateTimeField(verbose_name='更新时间',auto_now=True)
        class Meta:
            db_table = 'info'
            verbose_name = '用户信息'#在站点管理里展示表的名字
            verbose_name_plural = verbose_name#通常是复数展示,不写这个直接在verbose_name后面加上s
        def __str__(self):#写上这个函数,在增加或获取的时候返回的不是一个对象而是直观的数据
            return self.name
    admin.site.register(models.user_info)

     这样可以快速的可视化增加删除数据,点击增加就可以增加数据和删除数据

    为了更加直观的展示django里面的数据

    class ArticleAdmin(admin.ModelAdmin):
        list_per_page = 10 #每页最多展示多少条数据
    
        list_display = ['id','title','content','create_time'] #展示哪些字段
    
        list_filter = ['category'] #按照哪些字段来筛选
    
        search_fields = ['title','content']
    admin.site.register(models.Article,ArticleAdmin)

    7.中间件

    中间件的原理:中间可以做一下快速的处理,和代理类似

    没有中间件:请求---views---template--urls--html

    有中间件:请求--中间件---views---template--urls--html

    from django.http import HttpResponse
    from django.middleware.common import MiddlewareMixin
    
    from . import models
    class TestMiddleWare(MiddlewareMixin):
    
        def process_request(self,request):
            '''请求过来之后先走到的这里'''
            print('request....')
            path = request.path_info
            interface = models.Interface.objects.filter(path=path).first()
            if interface:
                return HttpResponse(interface.response)
    
    
        def process_response(self,request,response):
            #拦截返回的
            print('response....')
            return response
    
        def process_exception(self,request,exception):
            #拦截异常的
            print('出异常了。。')
            return HttpResponse('hhhh')

    8.在一对多的关系

    A表(文章表)对B表(类别表)是1对多的关系,一个类别一共有多少篇文章,可以只用一张表就可以查出数据

    c_obj=models.Category.objects.get(name='C++')
    print(c_obj.article_set.count())
    c_obj.article_set后面可以点出其他的功能
  • 相关阅读:
    kmeans 初步学习小结
    CAVASS使用经验
    分类之数据集导入matlab方法
    彩色图转化成灰度图
    阈值分割之迭代选择阈值法
    初步学习之FCM
    特征提取学习之HOG原理讲解
    特征提取初步学习之LBP算法
    CodePen.io网站前端设计开发平台
    阿里负责人揭秘面试潜规则
  • 原文地址:https://www.cnblogs.com/dmjsd/p/13549157.html
Copyright © 2011-2022 走看看