zoukankan      html  css  js  c++  java
  • Django框架下载与Django框架初识

    Django下载安装

    #下载
    	pip3 install django==1.11.9 
    	pip3 install django==1.11.9 -i http://xxxxxx  指定源
    #创建项目
    	django-admin startproject mysite   创建了一个名为"mysite"的Django 项目
    #启动项目
    	python manage.py runserver  默认是127.0.0.1:8000
    	python manage.py runserver 127.0.0.1  默认端口号是8000
    	python manage.py runserver 0.0.0.0:80 修改IP和端口
    #创建应用
    	python manage.py startapp blog   #通过执行manage.py文件来创建应用,执行这句话一定要注意,你应该在这个manage.py的文件所在目录下执行这句话,因为其他目录里面没有这个文件
    

    Django项目目录结构

    #manage.py ----- 
    	Django项目里面的工具,通过它可以调用django shell和数据库,启动关闭项目与项目交互等,不管你将框架分了几个文件,必然有一个启动文件,其实他们本身就是一个文件。
    #settings.py ---- 
    	包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
    #urls.py ----- 
    	负责把URL模式映射到应用程序。
    #wsgi.py ---- 
    	runserver命令就使用wsgiref模块做简单的web server,后面会看到renserver命令,所有与socket相关的内容都在这个文件里面了,目前不需要关注它。
    '''创建的的应用的目录结构'''
    #models.py 
    	之前我们写的那个名为model的文件就是创建表用的,这个文件就是存放与该app(应用)相关的表结构的
    #views.py
    	存放与该app相关的视图函数的
    

    admin后台管理系统

    #admin是django提供的管理数据的一个平台,可以查看项目的所有数据,包括查看数据,编辑数据,等
    1:# 在manage.py Task中创建超级用户 :createsuperuser,输入创建账号,密码,创建用户
    2:# 在应用的admin文件中添加表,在admin中就可以查看到表了,可以表进行操作
        admin.site.register(models.Author)
        admin.site.register(models.AuthorDetail)
        admin.site.register(models.Publish)
        admin.site.register(models.Book)
    

    Djiango路由分发

    # 无名分组参数
    	url(r'^articles/(d+)/(d+)/', views.articles), #articles/2019/9/
    	def articles(request,year,month):  # 位置参数 2019  9
             print(year,type(year)) #2019 <class 'str'>  #匹配出来的所有数据都是字符串
             print(month)
             return HttpResponse(year+'年'+ month +'月' +'所有文章')
    # 有名分组参数
        url(r'^articles/(?P<xx>d+)/(?P<oo>d+)/', views.articles), #articles/2019/9/
        #xx=2019  oo=9  关键字传参
        def articles(request,oo,xx):  # 关键字传参 2019  9
            print(xx,type(xx)) #2019 <class 'str'>  #匹配出来的所有数据都是字符串
            print(oo)
            return HttpResponse(xx+'年'+ oo +'月' +'所有文章')
    

    POST请求数据传输

    #方式一:
    def login(request):
        #获取请求的方式是GET还是POST
        path=request.method
        #当请求方式是GET的时候返回login页面
        if path=='GET':
            return render(request,'login.html')
        else:
            #为POST的时候,判断用户名和密码,返回首页或者返回登陆页面
            name=request.POST.get('username')
            password=request.POST.get('password')
            if name=='lijie'and password=='123456':
                return render(request,'home.html')
            else:
                return render(request,'login.html')
    #方式二:
    def login(request):
        #获取请求的方式是GET还是POST
        path=request.method
        #当请求方式是GET的时候返回login页面
        if path=='GET':
            return render(request,'login.html')
        else:
            #为POST的时候,判断用户名和密码,返回首页或者返回登陆页面
            #request.POST.dict()可以将获取的数据变成一个字典的形式,通过键值的形式取值
            data=request.POST.dict()
            if data['name']=='lijie'and data['password']=='123456':
                return render(request,'home.html')
            else:
                return render(request,'login.html')
    

    HTTPrequest对象

    from django.shortcuts import render
    def login(request):
        #request参数就是HTTPrequest对象
        print(request)#<WSGIRequest: GET '/login/'>
        
        #返回请求的路径,纯路径
        print(request.path)#/login/
        
        #返回请求的路径,纯路径
        print(request.path_info)#/login/
        
        #返回的是请求的全路径包括参数,不包含ip地址和端口,没有参数就返回纯路径
        print(request.get_full_path())#/login/?a=1&b=1
        
        #查看当前的请求类型
        print(request.method)#GET 一般常见的是GET和POST
        
        #返回的是一个QueryDict对象,是HTTP通过GET请求从客户端发送的请求数据
        #可以使用get方法获取对象的值:name=request.GET.get('username')
        print(request.GET)#<QueryDict: {}>
        
        # 返回的是一个QueryDict对象,是HTTP通过POST请求从客户端发送的请求数据
        # 可以使用get方法获取对象的值:name=request.POST.get('username')
        print(request.POST)#<QueryDict: {}>
        注意:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用
        request.POST.getlist("hobby")
        
        #返回HTTP请求中的请求体,是byte类型,POST请求的数据就是在body中提取的,GET请求获取不到数据
        print(request.body)
        
        #返回的是一个python字典,包含所有的HTTP请求头信息
        print(request.META)
        return render(request,'login.html')
    
    #META的常见值(了解):
        CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
        CONTENT_TYPE —— 请求的正文的MIME 类型。
        HTTP_ACCEPT —— 响应可接收的Content-Type。
        HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
        HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
        HTTP_HOST —— 客服端发送的HTTP Host 头部。
        HTTP_REFERER —— Referring 页面。
        HTTP_USER_AGENT —— 客户端的user-agent 字符串。
        QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
        REMOTE_ADDR —— 客户端的IP 地址。
        REMOTE_HOST —— 客户端的主机名。
        REMOTE_USER —— 服务器认证后的用户。
        REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。
        SERVER_NAME —— 服务器的主机名。
        SERVER_PORT —— 服务器的端口(是一个字符串)。
        #示例:
    	请求中的任何 HTTP 首部转换为 META 的键时,都会将所有字母大写并将连接符替换为下划线最后加上 HTTP_  前缀。
        所以,一个叫做 X-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键。
    

    HTTPResponse对象

    def home(request):
        #向前端返回一个字符串
        return HttpResponse('返回一个字符串')
        #向前段返回一个HTML页面
        return render(request,'home.html')
        #临时重定向,将请求指向另一个页面,括号里面写路径
        return redirect('/login/')
    
  • 相关阅读:
    Object.assign
    js获取 some方法索引值
    Vue配置sass
    spring MVC,controller中获得resuqest和response的方式
    CentOS7中启动Tomcat后,8080端口不能被外部访问的解决办法。
    spring mvc 中 controller 路径配置
    Spring扫面路径配置不全导致异常 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 的原因
    CentOS7中安装MySQL5.7
    eclipse maven web
    用Eclipse进行远程Debug代码
  • 原文地址:https://www.cnblogs.com/luckinlee/p/11622229.html
Copyright © 2011-2022 走看看