• 安装 命令行操作 目录 pycharm操作 工程配置 html文件中,关联静态文件 函数功能示例 常见问题


    安装

    • pip3 install django
    • Python35Scripts目录添加至环境变量

    命令行操作

    • 创建django工程: django-admin.exe startproject mysite(工程名)

    • cd mysite

    • 运行服务端,默认端口8000: python manage.py runserver

    • 指定端口,运行服务器: python manage.py runserver 127.0.0.1:8001

    • 创建app: python manage.py startapp cmdb(app名)

    • 创建数据库表结构:

      python manage.py makemigrations

      python manage.py migrate

    • 创建管理员用户及密码(Django自带的后台管理):

      python manage.py createsuperuser


    目录

    mysite

    mysite 			对整个程序进行配置
    	init.py		包
    	settings.py	配置文件,例如连接数据库、支持静态文件、支持缓存、支持模板
    	urls.py		URL对应关系
    	wsgi.py		遵循WSIG规则,一套接口规则,即调用别人实现的socket,上线用uwsgi + nginx
    manage.py		管理Django程序
    app
    	migrations	记录数据库的修改表结构操作
    	admin.py	Django提供的后台管理
    	apps.py		配置当前app
    	models.py	ORM,写指定的类,通过命令可创建数据库表结构
    	tests.py	单元测试
    	views.py	业务代码
    db.sqlite3		数据库
    

    pycharm操作

    • 创建django工程: File -> New Project -> Django -> 输入工程路径和工程名 -> Create
    • 运行服务端,默认IP 127.0.0.1, 默认端口8000: 点击工程名边上的运行按钮
    • 修改服务端运行配置参数: 点击工程名上的向下按钮,选择Edit Configurations
    • 修改pycharm根目录: File -> Settings -> Project:xxx -> Project Structure -> 设置 -> Apply -> OK

    工程配置

    配置模板路径(templates)

    工程中的settings.py
    
    TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        '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',
            ],
        },
    },
    ]
    

    配置静态目录(static)

    工程中的settings.py
    
    STATIC_URL = '/static/'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    

    注册app(数据库配置)

    工程中的settings.py
    	INSTALLED_APPS中添加app命令,例如
    		INSTALLED_APPS = [
    		    'django.contrib.admin',
    		    'django.contrib.auth',
    		    'django.contrib.contenttypes',
    		    'django.contrib.sessions',
    		    'django.contrib.messages',
    		    'django.contrib.staticfiles',
    		    'app01',
    		]
    

    根据情况配置使用数据库(可选)

    默认数据库(无需修改)
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
    修改数据库方式,数据名(dbname)需要自己创建
    DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'dbname',
        'USER': 'root',
        'PASSWORD': 'xxx',
        'HOST': '',
        'PORT': '',
        }
    }
    
    注:Django默认使用MySQLdb模块连接mysql数据库,但python 3.x中无该模块
    	需要改为pymysql:在project同名文件夹下的__init__.py文件中添加代码如下:
    		import pymysql
    		pymysql.install_as_MySQLdb()
    

    html文件中,关联静态文件

    静态文件包括CSS, JavaScript, Images

    关联css
    在html头部,添加
    <link rel="stylesheet" href="/static/commons.css"/>
    
    关联js
    在html的body的最后,添加
    <script src="/static/commons.js"></script>
    

    函数功能示例

    HttpResponse("字符串")

    from django.shortcuts import HttpResponse
    
    def home(request):
        # return ["<h1>Hello, date!</h1>".encode("utf-8"), ]
        return HttpResponse('<h1>CMDB<h1>')
    

    render(request, "HTML模板的路径")

    from django.shortcuts import render
    
    def login(request):
    	# request中包含用户提交的所有信息
    	# request.method 获取用户提交方式
        # f = open('templates/login.html', 'r', encoding='utf-8')
        # data = f.read()
        # f.close()
        # return HttpResponse(data)
        return render(request, 'login.html')
    

    redirect("/只能填URL的路径")

    以GET方式获取的数据

    from django.shortcuts import redirect
    
    from django.shortcuts import render
    from django.shortcuts import redirect
    
    def login(request):
        """
        :param request: 包含用户提交的所有信息
        """
        error_message = ""
        # request.method 获取用户提交方式
        if request.method == "POST":
            user = request.POST.get('user', None)
            pwd = request.POST.get('pwd', None)
            if user == 'root' and pwd == '123':
                return redirect("http://www.baidu.com")
            else:
                error_message = "用户名或密码错误"
        return render(request, 'login.html', {'error_message': error_message})
    

    常见问题

    TemplateDoesNotExist

    问题:若客户端访问服务器,出现TemplateDoesNotExist
    方法:检查工程settings.py中,TEMPLATES列表的DIRS字典,是否是
    	os.path.join(BASE_DIR, 'templates')	
    

    获取静态文件失败(404)

    按照“工程配置”中的“配置静态目录”,进行配置
    
    定位思路
    web页面 -》 右键 -》 审查元素 -》 Network -> 点击文件名 -》 Headers -> Request URL(http请求)
    

    客户端报CSRF(跨站请求伪造)

    settings.py中注释掉crsf
    
    MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    

    RuntimeError(post方法提交数据)

    You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. 
    Django can't redirect to the slash URL while maintaining POST data. 
    Change your form to point to 127.0.0.1:8000/login/ 
    (note the trailing slash), or set APPEND_SLASH=False in your Django settings.
    
    解释:该情况仅在Django出现,原因是Django,无‘/’, 会自动添加'/'
    原因:urls.py中的URL对照关系的检索对象与form表单中action的内容不对应
    方法:保证两种一致,后面都有‘/’,或都没有‘/’, 再重启工程,即可修复
    例如:
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^login', views.login),
    ]
    <form action="/login" method="post">
    或者
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^login/', views.login),
    ]
    <form action="/login/" method="post">
    

    SyntaxError: (unicode error)

    SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xd3 in position 0: 
    invalid continuation byte
    
    原因:工程文件编码问题,非utf-8,不识别汉字
    解决方法:将工程文件编码格式,修改为utf-8,再重新打开工程
    File -> Settings -> Editor -> File encodings
    

    编写完数据库结构,执行命令makemigrations,提示No changes detected

    原因: 工程中的settings.py中,无注册app
    解决方法:
    	工程中的settings.py
    		INSTALLED_APPS = [
    		    'django.contrib.admin',
    		    'django.contrib.auth',
    		    'django.contrib.contenttypes',
    		    'django.contrib.sessions',
    		    'django.contrib.messages',
    		    'django.contrib.staticfiles',
    		    'app01',
    		]
    
  • 相关阅读:
    Python之美[从菜鸟到高手]--Python垃圾回收机制及gc模块详解
    linux-memory-buffer-vs-cache
    MYSQL----myownstars(102)
    win10系统调用架构分析
    on io scheduling again
    Java并发编程
    elixir-lang
    mydumper工作原理, seconds_behind_master的陷阱和pt-heartbeat (102)
    深入理解JavaScript系列+ 深入理解javascript之执行上下文
    我们应该如何去了解JavaScript引擎的工作原理 系列
  • 原文地址:https://www.cnblogs.com/todayisafineday/p/8111649.html
Copyright © 2020-2023  润新知