初识django框架

django框架

1、框架介绍

  根据第一部分内容介绍,我们可以总结出一个web框架应该包含如下三部分:a.sockect服务、b.根据不同的url调用不同函数(包含逻辑)、c.返回内容(模板渲染)。常见的python WEB框架有tornado(包含如上3部分, Django(上述a部分为第三方的),flask(上述a和c为第三方的)。

2、Django安装

一、命令行方式

命令行创建django项目(首先将cd到django项目欲放置的位置):

 使用方法

进到要存放的文件夹目录

启动Django项目:
    命令行方式:
        python manage.py runserver 127.0.0.1:8888
        python manage.py runserver 8888

目录介绍

配置文件

  模板文件配置:在python中创建一个django项目后,在项目文件夹下会多一个templates文件夹,主要用于存放html模板文件,若要准确找到引用的html文件,需要在setting文件中对此文件夹路径进行配置。如下:(利用pycharm创建django项目,pycharm会自动帮你创建)

 

静态文件配置:在使用html模板文件时,其通常会有使用js或css等文件,这些文件称为静态文件,为了使其正常生效,我们也需要在setting文件进行相关配置,如下:

html文件中引用静态文件的方式如下:

django入门必学三招

HttpResponse

:用于向服务器返回字符串(如启动服务后,在浏览器请求:127.0.0.1:8000/index/后,浏览器显示hello world字符内容)

from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import HttpResponse,render,redirect

def index(request): # 所有跟请求相关的数据,都保存在request
    return HttpResponse("<h1>hello world</h1>")

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^index/', index),
]

 (2)render

:用于渲染html文件,如启动服务后,在浏览器请求:127.0.0.1:8000/login/后,浏览器会显示login.html文件应被渲染出的结果

urls.py

此过程中的错误点:

 redirect(具体要跳转的URl)

 

用django连接数据库,密码登录网站

def login(request):
    # return HttpResponse("Hello World")
    # 判断request是否是POST方法
    error_msg = ' '
    if request.method == "POST":
        # 定义两个变量接收浏览器POST的数据
        name = request.POST.get("username")
        pwd = request.POST.get("password")
        # 与数据库建立连接
        # conn = pymysql.connect(host="localhost", database="day60", user="root", password="123456", charset="utf8")
        conn = pymysql.connect(**config)
        cursor = conn.cursor()
        # 查询语句,进行密码以及账号的认证
        sql = "SELECT * FROM userinfo WHERE NAME = %s AND pwd = %s;"
        try:
            ret = cursor.execute(sql, [name, pwd])
            if ret:
                return redirect("http://www.cnblogs.com/jassin-du/p/8270462.html")
            else:
                error_msg = "用户名密码错误"
        except Exception as e:
            print(e)

    return render(request, "login.html", {"key": error_msg})


urlpatterns = [
    url(r'^login/', login),
    url(r'^admin/', admin.site.urls),
    # url(r'^$', login),
]
urls.py文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>登录</title>
    <link rel="stylesheet" href="../static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="/templates/login.html">
    <style>
        body {
            background-color: #eeeeee;
        }

        #login-form {
            margin-top: 100px;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="row">
        <form id="login-form" class="form-horizontal col-md-4 col-md-offset-4" action="login.html" method="post">
            <h3 class="text-center">请登录</h3>
            <div class="form-group">
                <label for="username" class="col-sm-2 control-label">账号</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control" id="username" placeholder="账号" name="username">
                </div>
            </div>
            <div class="form-group">
                <label for="inputPassword" class="col-sm-2 control-label">密码</label>
                <div class="col-sm-10">
                    <input type="password" class="form-control" id="inputPassword" placeholder="Password" name="password">
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                    <div class="checkbox">
                        <label>
                            <input type="checkbox">记住我
                        </label>
                    </div>
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                    <button type="submit" class="btn btn-primary btn-block">登录</button>
                    <p style="color: red">{{key}}</p>
                </div>
            </div>
        </form>
    </div>
</div>
<script src="../static/jquery-3.2.1.min.js"></script>
</body>
</html>
HTML文件
"""
Django settings for jgo项目 project.

Generated by 'django-admin startproject' using Django 1.11.8.

For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""

import os




# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '7(_h_umn&5&k2u60h@_=-*k2@28d+!g)#pab2vqr*6v+gt0bha'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
#
ALLOWED_HOSTS = []


# Application definition

# 安装的app
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

# 中间件
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',
]

# url 路由的某些配置
ROOT_URLCONF = 'jgo项目.urls'

# 模板相关的
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',
            ],
        },
    },
]

#wsgi服务器网关
WSGI_APPLICATION = 'jgo项目.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

# 数据库相关
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators

# 认证相关文件
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

# 静态文件(css 文件和 js文件) 存放的实际位置
STATIC_URL = '/static/'

# 静态文件(css文件和js文件) 存放的实际位置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,"static"),
    # os.path.join(BASE_DIR,"css"),
]
settings文件
原文地址:https://www.cnblogs.com/jassin-du/p/8270462.html