Django新手入门

文章目录

      • 请求:
      • 视图:
          • 1.定义URL
          • 2.获取URL参数
          • 3.获取GET/POST参数
          • 4.响应对象
          • 5.响应HTML
          • 6.重定向
          • 7.配置静态文件
          • 8.class重写视图
          • 9.错误请求
      • 模板
          • 1.模板标签
          • 2.模板继承
          • 3.添加公共
          • 4.过滤器
      • ORM模型:
          • 配置
          • 模型同步
          • 1.字段定义
          • 2.元数据 Meta
          • 3.关联关系
          • 4.CRUD
          • 5.QuerySet结果集
          • 6.用SQL查询
          • 7.分页处理
          • 8.聚合统计
      • 表单
          • 字段类型
          • 字段参数
          • 表单类参数
          • form对象属性
          • form对象方法
          • 1.表单的使用
          • 2.单字段验证 clean_xx
          • 3.多个字段验证 clean
          • 4.ORM创建表单
          • 5.同时修改其他表单
          • 6.上传文件
      • 重写响应:

视图view+模板template+模型model

python manager.py runserver [port]
python manager.py startapp [appname]

请求:

  • META
    • REMOTE_ADDR 请求的IP地址
    • HTTP_USER_AGENT 用户请求终端信息
  • Content-Type
    • text/plain 普通文档
    • text/xml XML文档
    • application/json json数据类型
  • GET,POST,COOKIE,FILES
request.类型.get("参数名",“默认值”)
request.META.get("REMOTE_ADDR","default")
request.headers['参数名']

视图:

接受请求返回响应

1.定义URL
 path(route,view,name,**kwargs)
 include(urls,namespace)
 
 #########示例#########
 path('sight/image/list/',SightImageView,name='SightImageView')
 path('account/',include('accounts.urls'))
2.获取URL参数
  1. url/path传参

  2. view视图取参

     re_path(r'(?P表达式)/',view,name)
     path('...//',view,name)
     
     def uname_view(request,arg)
     
     #########示例#########
     path('article/',article_list,name='article_list')
     def article_list(request,page)
     
     re_path(r'^article/(?P0?[1-9]|1[012])/$',article_list,name='article_list')
     def article_list(request,month)
    
3.获取GET/POST参数
 request.GET.get('arg','')
 
 #########示例#########
 http:127.0.0.1:8080/?name=jinhu
 request.GET.get('name',None)
4.响应对象
  • HttpResponse
  • JsonResponse
    user_info={'name':'12','age':32}
    return JsonResponse(user_info)
    
  • FileResponse
    return FileResponse(open('m.png','rb'))
    
5.响应HTML

​ 磁盘读取+替换特殊字符+发送浏览器

 render(request,template_name,{})
 
 #########示例#########
 data = {
 	'name':'jinhu'
 }
 return render(request,'hello.html',{
 	'data':data
 })
6.重定向
 redirect(route)
 
 #########示例#########
 path('not/found',no_data_404,name='no_data_404')
 
 redirect('no_data_404')
  • 重置内置错误视图
    • urls.py添加
    urlpatterns = [
        path('admin/', admin.site.urls),
     ]
    handler_500 = '视图函数名字'
    
    • settings.py修改DEBUG=False
7.配置静态文件
  • 根目录下创建medias文件夹

  • settings.py

     MEDIA_URL='/media/'
     MEDIA_ROOT=os.path.join(BASE_DIR,'medias')
    
  • urls.py

     urlpatterns += [
     	url(r'^media/(?P.*)$,serve,{
     	'document_root':settings.MEDIA_ROOT
     	})
     ]
    

    /media/images/dog.jpg被替换为/medias/images/dog.jpg

8.class重写视图
  • TemplateView
     // 返回hello.html
     url('hello/',HomeView.as_view(),name='hello')
     
     class HomeView(TemplateView):
     	template_name='hello.html'
     ```
    
  • ListView:分页列表类数据
    class SightListView(ListView):
        paginate_by = 5
    
        def get_queryset(self):
            """重写查询方法1"""
            is_hot = self.request.GET.get("is_hot",None)
            is_top = self.request.GET.get("is_top",None)
            query = Q()
            if is_hot:
                query = query & Q(is_top=True)
            if is_top:
                query = query & Q(is_hot=True)
            queryset = Sight.objects.filter(query)
            return queryset
    		"""重写查询方法2"""
     	    sight_id = self.kwargs.get('pk', None)
            sight = Sight.objects.filter(pk=sight_id, is_valid=True).first()
            if sight:
            	return sight.comments.filter(is_valid=True)
            return Comment.objects.none()
    
        def render_to_response(self, context, **response_kwargs):
            page_obj = context['page_obj']
            if page_obj is not None:
                data = serializers.SightListSerializer(page_obj).to_dict()
                return http.JsonResponse(data)
            else:
                return NotFoundJsonResponse()
    
  • DetailView:详情类数据
    class SightDetailView(DetailView):
    
        def get_queryset(self):
        	# 自动搜索 path(...//) 对应的pk值
            return Sight.objects.all()
    
        def render_to_response(self, context, **response_kwargs):
            page_obj = context['object']
            if page_obj is not None:
                if page_obj.is_valid == False:
                    return NotFoundJsonResponse()
                data = serializers.SightDetailSerializer(page_obj).to_dict()
                return http.JsonResponse(data)
            return NotFoundJsonResponse()
    
9.错误请求
class NotFoundJsonResponse(JsonResponse):
    """ 400 对应JSON响应 

你可能感兴趣的:(django,笔记,python)