重修课程day57(Django的开始)

一 浏览器相关知识

 http:只有依赖一回,属于短链接,不会报错客户端的信息。

 浏览器相当于一个客户端,客户端的链接

 服务端:socket服务端,起服务监听客户端的请求。

import socket
sk=socket.socket()
sk.bind((‘192.168.11.38‘,8888))
sk.listen(5)

def index():
    with open(‘轮播网页.html‘,encoding=‘utf-8‘)as f:
        ret=f.read()
        return ret
def login():
    with open(‘login.html‘,encoding=‘utf-8‘)as f:
        ret=f.read()
    import pymysql
    conn=pymysql.connect(
        host=‘127.0.0.1‘,
        port=3306,
        user=‘root‘,
        passwd=‘0410‘,
        db=‘day46‘
    )
    cursor=conn.cursor()
    cursor.execute(‘select * from user‘)
    user_list=cursor.fetchall()
    cursor.close()
    conn.close()
    res=‘‘
    for i in user_list:
        res += ‘‘‘
        <tr>
            <td>{}</td>
            <td>{}</td>
            <td>{}</td>
        </tr>
        ‘‘‘.format(i[0], i[1], i[2])
    tables= ret.replace(‘@@[email protected]@‘,res)
    return tables

def info():
    return "这是个人信息"

info_index=[
    (‘/login/‘,login),
    (‘/index/‘,index),
    (‘/info/‘,info)
]
while True:
    conn,addr=sk.accept()
    print(addr)
    data=conn.recv(8096)
    data3=str(data,encoding=‘utf-8‘)
    data1=data3.split(‘\r\n\r\n‘)[0]
    print(‘*‘*50)
    print(data1)
    data2=data1.split(‘\r\n‘)[0].split(‘ ‘)[1]
    print(data2)
    ingo_name=None
    for i in info_index:
        if data2==i[0]:
            ingo_name=i[1]
            break
    if ingo_name:
        response=ingo_name()
    else:
        response=‘404‘

    conn.send(b‘HTTP/1.1 200 0k\r\nContent-Type:text/html;charset=utf-8\r\n\r\n‘)
    conn.send(response.encode(‘utf-8‘))
    conn.close()

二 框架的介绍

 tornado:模版都是人家写好的,我们只管拿来使用。

 Django:服务端可以自己写,其他的模版都是别人写好的。

 flask:服务端和模版渲染都是自己写的,函数的功能都是别人写好了的。

 所有的web框架叫做web应用服务器。

三 django的安装和使用

 安装:pip install django。

 创建项目:django-admin startproject 项目名

 手动创建:

 查看参数:django-admin。

 开启项目:python manage.py runserver

 响应格式:

  {

  "接收到的想要":回复

。。。。。

  }

四 使用

 request:代表所有请求的内容

  request.method

  request.POST.get(‘***‘)

 新手三件套:

  导入:from django.import import

   HttpResponse:http的响应

   render:渲染

    render(request, ‘html文件‘)

    render(request,"html文件",{"替换的内容":值})

   redirect:跳转页面

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

def mysql():
    import pymysql
    user_dic = {}
    conn=pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="0410", db="day43", charset="utf8")
    cursor=conn.cursor()
    cursor.execute(‘select name,password from user‘)
    user_list = cursor.fetchall()
    cursor.close()
    conn.close()
    for user in user_list:
        user_dic[user[0]]=user[1]
    return user_dic

def login(request):
    if request.method==‘GET‘:
        return render(request,‘登陆界面.html‘)
    else:
        user_dic=mysql()
        for user in user_dic:
            if request.POST.get(‘user‘)==user and request.POST.get(‘passwd‘)==user_dic[user] and request.POST.get(‘pwd‘)==user_dic[user]:
                return redirect(‘http://www.xiaohuar.com/hua/‘)
            elif request.POST.get(‘user‘)==user and request.POST.get(‘passwd‘)==user_dic[user] and request.POST.get(‘pwd‘)!=user_dic[user]:
                return render(request, ‘登陆界面.html‘, {‘error_msg‘: ‘密码输入不一致‘})
        else:
            return render(request,‘登陆界面.html‘,{‘error_msg‘:‘用户名和密码错误‘})

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^login/‘,login)
]

 模版语言:

  格式1:

   {% for i in **%}

    {{x}}

   {% endfor %}

  格式2:

   {{ 变量名 }}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1 {
            width: 100%;
            height: 50px;
            background-color:#DDDDDD;
            opacity: 0.3;
        }

        .c4{
            width:80%;
            height:50px;
            background-color:#DDDDDD;
            margin-left: 10%;
        }

        .c7{
            width: 100px;
            height: 50px;
            float:left;
        }

        .c8{
            width: 80px;
            height: 50px;
            float:right;
        }

        .c9{
            width: 120px;
            height: 50px;
            float:right;
        }

        .c10{
            width: 80px;
            height: 50px;
            float:right;
        }

        .c11{
            width: 80px;
            height: 50px;
            float:right;
        }

         .c12{
             width: 50px;
             height: 50px;
             float:right;
        }

        .s1{
            line-height:50px;
            text-align: center;
            color:#1F1E1E;
        }

        .c2{
            width:100%;
            height: 60px;
            background-color: #ffffff;
            margin-top: 20px;
        }

        .c5{
            width: 80%;
            height: 60px;
            background-color: #FFFFFF;
            margin-left: 10%;
        }
        .c3{
            width:100%;
            height:auto;

        }

        .c6{
            width: 80%;
            height: auto;
            margin-left: 10%;
        }

        .d1{
            width: 500px;
            height: 400px;
            float: left;
            margin-top: 50px;
        }

        .d3{
            width: 500px;
            height: 50px;
            margin-top:60px;
        }

        .s2{
            font-weight:600;
            font-size:30px;
            color: #2e2e2e;
            line-height:50px;
            margin-left: 70px;

        }

        .p1{
            margin-left: 120px;
        }

        .p2{
            margin-left: 104px;
        }

        .i2{
            margin-left: 15px;
        }

        .s3{
            color:red;
        }

        .p4{
            margin-left: 150px;
        }

        .s4{
            color:#0000CC;
        }

        .i3{
            font-size: 14px;
        }

        .p5{
            margin-left: 200px;
        }

        .i5{
            font-size: 10px;
             background-color:red;
        }

        .d2{
            width: 314px;
            height:400px;
            float: right;
            margin-top: 50px;
        }

        .p6{
            margin-left:30px;
        }

        .p7{
            margin-top: 50px;
        }

    </style>
</head>
<body>

<div class="c1">
    <div class="c4">
        <div class="c7"><span class="s1">*收藏网址</span></div>
        <div class="c8"><span class="s1">客户服务</span></div>
        <div class="c9"><span class="s1">VIP会员俱乐部</span></div>
        <div class="c10"><span class="s1">我的订单</span></div>
        <div class="c11"><span class="s1">免费注册</span></div>
        <div class="c12"><span class="s1">登陆</span></div>
    </div>
</div>
<div class="c2">
    <div class="c5"><img src="111.png" alt="悟空"></div>
</div>
<div class="c3">
    <div class="c6">
        <div class="d1">
            <div class="d3"><span class="s2">注册新用户</span></div>
            <form action="/login/" method="post">
                <p class="p1"><span class="s3">*</span>用户名:<input type="text" name="user" class="i2"></p>
                <p class="p1"><span class="s3">*</span>手机号:<input type="text" name="phone" class="i2"></p>
                <p class="p2"><span class="s3">*</span>登陆密码:<input type="password" name="passwd" class="i2"></p>
                <p class="p2"><span class="s3">*</span>确认密码:<input type="password" name="pwd" class="i2"></p>
                <p class="p4"><input type="checkbox" name="ppp"><span class="i3">我已阅读并同意</span><span class="s4 i3">《用户注册协议》</span> </p>
                <p class="p5"><input type="submit" value="开始登录" class="i5"></p>
                {{ error_msg }}
            </form>
        </div>
        <div class="d2">
            <p class="p6 p7"><img src="222.png" alt="悟天" width=‘250px‘ height="200px"></p>
        </div>
    </div>
</div>
</body>
</html>

 setting文件的配置:

  添加路径:

			TEMPLATES = [
				{
					‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘,
					‘DIRS‘: [],   # 在这里进行设置
					‘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‘,
						],
					},
				},
			]

  注释内容:

			2. 中间件需要注释一个
			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‘,
		]

  静态文件设置:

			STATIC_URL = ‘/static/‘
			STATICFILES_DIRS = (
				os.path.join(BASE_DIR, "ss"),  # 静态文件存放位置

			)

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 = ‘#vofy$6d=w^aoa0kk#8jhtc3mno9o)eil^8-a^u=)cana=9zq^‘

# SECURITY WARNING: don‘t run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []

# Application definition

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‘,
]

ROOT_URLCONF = ‘bigJob.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_APPLICATION = ‘bigJob.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/

STATIC_URL = ‘/static/‘
STATICFILES_DIRS=(os.path.join(BASE_DIR,‘css‘),)
IEMPLATE_DIRS=(os.path.join(BASE_DIR,‘templates‘),)

   

时间: 2024-10-13 18:29:57

重修课程day57(Django的开始)的相关文章

重修课程day62(django之中间件)

中间件: class MiddleWare2(MiddlewareMixin): def process_request(self,request): print("MW2 request...........") # return HttpResponse("666!") def process_view(self, request, callback, callback_args, callback_kwargs): # print("callback

重修课程day61(django之补充)

一 QuerySet类型 QuerySet类型:只和orm有关,如果一涉及数据库,就会有QuerySet类型的出现. QuerySet切片操作:QuerySet是支持切片操作的,不过不能放负数.查询集的切片会返回一个新的查询集,不会执行查询. Entry.objects.all()[:5] # (LIMIT 5) Entry.objects.all()[5:10] # (OFFSET 5 LIMIT 5) QuerySet遍历操作: # for book in bookList: # print

重修课程day59(django之http)

一 http协议介绍 http协议(Hyper Text Transfer Protocol):超文本传输协议,是基于应用层的面向对象协议,靠tcp协议和IP来传输数据,请求和响应是http协议的基本概念. http协议工作于客户端与服务端架构之上,浏览器作为http客户端通过url向HTTP服务端发送所有请求. 二 http特点 1 简单快速:浏览器向服务端发送请求时,只需要传送请求的方法和路径. 请求方法:GET,POST,HEAD,不同方法有着不同的联系类型. 2 灵活:http传输可以是

重修课程day45(mysql之练习题二)

准备表: create table class(cid int primary key auto_increment, caption char(5) not null unique); INSERT into class(caption)values('三年二班'),('一年三班'),('三年一班'); CREATE table student(sid int primary key auto_increment, sname char(6) not null, gender enum('男'

重修课程day7(python基础4之基础补充)

一 bit,和bytes的关系 bit:就是计算机的最小的表示单位. bytes:就是计算机的最小的储存单位. 1  字节(bytes) = 8 位(bit) 格式: print(bytes('字符',encoding='utf-8')) 文件默认读取文件 二 strip的其他功能 strip去掉两边的空格,换行符,制表符等等,还可以指定删除字符 a=' dsad ' print(a.strip()) b='\ndsfsadagh\t' print(b.strip()) print(123) c

重修课程day1(python基础1)

一 什么是计算机 1 计算机就是由一堆硬件组成的一个机器. 2 硬件的分类: CPU:犹如人类的大脑,运行着需要运行的程序. 内存:将 CPU要运行的内容从硬盘中读取出来,然后CPU在内存里拿内容,只是一个短暂性的存储,加入突然关机,数据会丢失. 硬盘:硬盘相当于人的笔记本,长期可以存储数据,永久性的存储.关机数据也不会丢失. 他们三者之间是由操作系统来操作的. 3 什么使操作系统:操作系统本身就是一个软件,而它是建立在硬件之上,他控制着每一硬件的运行,是硬件的运行有序化. 4 什么是应用程序:

重修课程day24(面向对象5之封装)

type:是所有类的类型,所有类的类型默认是type. 一 封装 1 什么叫做封装:就是将自己想要隐藏起来的内容给隐藏起来. 封装的原则:1.1将不需要对外提供的内容隐藏起来:1,2将属性隐藏起来,提供公共方法对其访问. 2 私有属性:self.__属性名 3 私有的静态属性:__静态属性名 4 私有方法:def  __函数名(self): # class Teacher: # __zhiwei='laoshi' #创建私有静态属性 # def __init__(self,name,pwd):

重修课程day22(面向对象三之继承和派生)

面向对象的三大特性:封装,继承和多态 一 继承 1 什么是继承:1.1 什么是什么的关系.一个类是另一个类的子类. 1.2 继承是一种创新类的方式.新建的类可以继承一个或多个父类.父类又称为基类或超类,新建的类又称为派生类或子类 继承一个父类叫做单继承:继承多个父类叫做多继承. 2 继承的好处:减少代码的冗余,增强了代码的重用性. 二 继承的用法 super:调用父类的功能和方法 格式一:在子类的内部调用父类的属性和方法 class 父类名: def  属性(self): 功能 class 子类

重修课程day6(python基础4之集合和文件操作)

一 字典属性方法补充 1 clear  :清空 2 Cory:拷贝 3 fromkeys:生成一个字典,类下面的一个属性方法 4 pop  :删除 5 popitem  : 删除整个元素 6 setdefault:只添加不修改 7 update :存在的话跟新,没有就会添加 二 集合以及集合的功能 集合是一个不存在重复的值,而且还是无序的. 1 add :添加不可能重复 2 clear :清空 3 copy :拷贝 4 difference :差集只存在一个集合的 5 difference_up