1 昨日回顾
a socket
b 路由关系
c 模板字符串替换(模板语言) 主流web框架总结:
django a用别人的 b自己写的 c自己写的
flask a用别人的 b自己写的 c用别人的(jinja2)
tornado a自己写的 b自己写的 c自己写的 另一个维度:
djaogo
其他 创建Django
1 模块安装(三种方法)
1 ---
2 --
3--
2 django-admin startproject mysite 3 manage.py 管理我的django项目
4 (1)启动django--python3
-manage.py runserver 127.0.0.1:8002
-manage.py runserver 8002
-manage.py runserver
(2)pycharm启动:1 跟上面一样
2 点绿色的箭头
不是点右键运行
5 停止 ctrl+c 6 目录介绍
settings--django全局配置文件
urls---路由关系 app:
命令:python3 manage.py startapp app01
目录:
migrations:数据库迁移的文件
admin:后台管理相关
apps:app配置相关
models:模型,数据库相关,写一些类
tests:测试相关
views:视图函数 settings:
DEBUG
INSTALLED_APPS---》放app的名字
MIDDLEWARE--》中间件
TEMPLATES---》指定模板文件放的路径
DATABASES---》指定连接的数据库 静态文件配置:(名字一定不能错)
STATICFILES_DIRS=[
os.path.join(BASE_DIR, 'static'),
] 三件套:
# render 模板渲染
# HttpResponse 返回字符串
# redirect 重定向 orm:对象关系映射
python代码------》sql
前端:
$("#app")------>document.getEmlementById(‘app’) 优点:
1 sql掌握一般,也可开发程序
2 开发效率高
3 易用,学习曲线短 缺点:
1 sql大神,执行效率高,可能orm 执行效率低
2 有的sql写不出来 作业:
1 上课讲的代码敲完
2 写个注册,登录
3 看一下orm(有余力) 项目的基本配置 settings文件
 """
Django settings for mySecond project. Generated by 'django-admin startproject' using Django 1.11. 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, ...)
# 根路径 mySecond
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 = 'uzz2#7dq+qruh2e6&cklrwj49(oe0&@hwaqqtkmb0z2xmhe03*' # 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',
# 新建的功能项目需要添加到INSTALLED_APPS
# app01下面的apps里面的App01Config
'app01.apps.App01Config',
] 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 = 'mySecond.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 = 'mySecond.wsgi.application' # Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases # 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/ # 静态文件配置:(名字一定不能错)
# STATICFILES_DIRS=[
# os.path.join(BASE_DIR, 'static'),
# ]
STATIC_URL = '/static/' # 这步相当于做了个接口,通过接口来访问STATICFILES_DIRS
# 如果不写static_url这个接口,外面可以直接调用里面的文件
STATICFILES_DIRS=[
os.path.join(BASE_DIR, 'static'),
]

settigns

管理django项目的manage文件

 #!/usr/bin/env python
import os
import sys if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mySecond.settings")
try:
from django.core.management import execute_from_command_line
except ImportError:
# The above import may fail for some other reason. Ensure that the
# issue is really that Django is missing to avoid masking other
# exceptions on Python 2.
try:
import django
except ImportError:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
)
raise
execute_from_command_line(sys.argv)

manage

urls 存放请求地址和函数关系的路由

 """mySecond URL Configuration

 The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^login/', views.login),
url(r'^login_submit/', views.login_submit),
]

urls

views  视图函数的存放点

 from django.shortcuts import render,HttpResponse,redirect
# 三件套 render 模板渲染
# HttpResponse 返回字符串
# redirect 重定向
import pymysql # redirect 重定向
# Create your views here. def index(request):
# with open('templates/index','r') as f:
# data=f.read()
print(request.method) # return HttpResponse('<h1>Hellw</h1>')
return render(request, 'index.html') def login111(request):
# GET 一定要大写
if request.method == 'GET':
return render(request, 'login.html')
elif request.method == 'POST':
name = request.POST['name']
# 推荐用这种
# request.POST 请求体的内容都在里面,字典形式
# <QueryDict: {'name': ['123'], 'password': ['444']}>
password = request.POST.get('password', None)
conn = pymysql.connect(host='127.0.0.1', user='root', password="", database='test', port=3306) cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute('select * from user where name=%s and password=%s', [name, password])
user = cursor.fetchone()
if user:
return HttpResponse('登录成功')
# if name == 'lqz' and password == '123':
# # return HttpResponse('登录成功')
# return redirect('www.baidu.com')
# # return redirect('http://127.0.0.1:8000/index/')
else:
error = '用户名或密码错误'
return render(request, 'login.html', {'error': error}) def login(request):
error = ''
if request.method == 'POST':
name = request.POST['name']
password = request.POST.get('password', None)
conn = pymysql.connect(host='127.0.0.1', user='root', password="", database='test', port=3306)
cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute('select * from user where name=%s and password=%s', [name, password])
user = cursor.fetchone()
if user:
return HttpResponse('登录成功')
else:
error = '用户名或密码错误'
return render(request, 'login.html', {'error': error}) def login_submit(request):
# print(request.get_full_path())
# print(request.method)
print(request.POST)
name = request.POST.get('name',None)
# 推荐用这种
# request.POST 请求体的内容都在里面,字典形式
# <QueryDict: {'name': ['123'], 'password': ['444']}>
password = request.POST.get('password', None)
if name == 'lqz' and password == '':
# return HttpResponse('登录成功')
return redirect('/index/') return redirect('/login/')

views

注意:html结尾的这些文件通常都放在templates下,称作模板

index.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/css/mycss.css">
</head>
<body>
<h1>Hello</h1>
</body>
</html>

index.html

login.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
<div class="container"> <div class="row"> <div class="col-md-6 col-md-offset-3"> <form action="" method="post"> <p>用户名:<input type="text" name="name" class="form-control" ></p>
<p>密码:<input type="password" name="password" class="form-control"></p>
<p><input type="submit" value="登录" class="form-control"></p>
<p class="text-danger text-center">{{ error }}</p> </form>
</div>
</div> </div> </body>
</html>

login.html

static文件:下面存放着css,js,img,bootstrap等。。

最后,附上自己的作业:

 from django.shortcuts import render,HttpResponse,redirect

 # Create your views here.
# 视图层函数里面就是一个个需要通过路由来调用并访问的函数
# 调用函数的目的是为了去访问模板层。
import pymysql def index(request):
with open('templates/index','r') as f:
print(f.read())
return render(request,'index.html')
# return HttpResponse('<h1>hellowword</h1>') def register(request):
if request.method == 'GET':
return render(request,'register.html')
elif request.method == 'POST':
name = request.POST.get('name',None)
password = request.POST.get('password',None)
re_password = request.POST.get('re_password',None)
if password != re_password:
return HttpResponse('password is not similar')
else:
conn = pymysql.connect(host='127.0.0.1', user='root', password="", database='test', port=3306) cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute('select * from user where name=%s and password = %s', [name, password])
user = cursor.fetchone()
if user:
return HttpResponse('having the similar user please change the user or password')
else:
# 数据库建表的时候要递增
cursor.execute('insert into user(name,password) values(%s,%s) ', [name, password])
print(request.POST.get('name',None))
# 必须要提交,否则不会写到数据库里
conn.commit()
# 必须要有返回值
return HttpResponse('sn') def login(request):
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
name = request.POST.get('name',None)
password = request.POST.get('password',None)
conn = pymysql.connect(host='127.0.0.1', user='root', password="", database='test', port=3306) cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute('select * from user where name=%s and password=%s', [name, password])
user = cursor.fetchone()
if user:
return HttpResponse('login success')
else:
error = "logging fail,relog again"
return render(request,'login.html',{'error':error})

views

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>register</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
<div class = 'row'>
<div class = 'col-md-6 col-md-offset-3'>
<form action="" method = 'post'>
<p>user:<input type="text" name="name" class="form-control" ></p>
<p>pwd:<input type="password" name="password" class="form-control"></p>
<p>re_pwd:<input type="password" name="re_password" class="form-control"></p>
<p><input type="submit" value="register" class="form-control"></p>
<p class="text-danger text-center">{{ error }}</p>
</form>
</div>
</div> </body>
</html>

register.html


Django框架和前端的的基本结合的更多相关文章

  1. Django框架之前端渲染-模板层

      Django 模板层   Django 模板层 前后端数据传递 (1) 后端朝前端页面传递数据的方式: # 将当前所在的名称空间中的名字全部传递给前端页面 # 第一种 return render( ...

  2. Django框架全面讲解

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  3. WEB框架-Django框架学习-预备知识

    今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...

  4. Django框架的探索

    django框架的路由 django2 路由支持正则匹配,如: re_path(r'^category/(?P<category_id>\d+)/$',CourseCategoryView ...

  5. Django框架理解和使用常见问题

    1.什么是中间件? 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出. 中间件一般做认证或批量请求处理,django中的中间 ...

  6. Django框架的简介

    Django框架的背景 Django是一款基于Python开发的全栈式一体化Web 应用框架.2003 年问世之初,它只是 美国一家报社的内部工具,2005 年 7 月使用 BSD 许可证完成了开源. ...

  7. 理解django框架中的MTV与MVC模式

    1.Models:一个抽象层,用来构建和操作你的web应用中的数据,模型是你的数据的唯一的.权威的信息源.它包含你所储存数据的必要字段和行为.通常,每个模型对应数据库中唯一的一张表. from dja ...

  8. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  9. Django 框架 基本知识

    一.什么事web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支持结构,使用框架可以使我们快速开发特定的系统,简单来说,就是讲实现方式的底层结构进行封装,提供相应的 ...

随机推荐

  1. Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

  2. CF 622 F The Sum of the k-th Powers —— 拉格朗日插值

    题目:http://codeforces.com/contest/622/problem/F 设 f(x) = 1^k + 2^k + ... + n^k 则 f(x) - f(x-1) = x^k ...

  3. redis 操作使用

    /*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超 ...

  4. Linux系统如何查看版本信息?

    查看版本号 我在Ubuntu下做测试 1 命令行执行 cat /etc/issue  (切记cat后要空一格)即可看到版本信息. 2 登录linux,在终端输入 cat /proc/version  ...

  5. 1.9 Hive常见属性配置

    一.Hive数据仓库位置配置 1. # Hive数据仓库位置配置: 默认位置(hive根目录): /user/hive/warehouse 注意事项: *在仓库目录下,没有对默认的数据库default ...

  6. Winform禁止程序多开 &&禁止多开且第二次激活第一次窗口

    一.禁止多开问题,运用Mutex锁 在Program.cs中运用Mutex锁 bool createNew;using (System.Threading.Mutex mutex = new Syst ...

  7. DP简单问题联系--最长递增子序列+最长公共子序列等

    今天重温了一下dp问题,发现自己两个礼拜不写题目就什么都不会了...心态爆炸,感觉去考试怕是要gg了... 不过今天总结一下写的题目,全部都是基础的dp问题 第一个是 求最长不下降子序列的长度 第一行 ...

  8. POJ3692【二分匹配】

    题意: 有男生女生,男生都认识双方,女生都认识双方,给出一些男女关系,问最大拿多少个人,使得所有人都认识双方. 思路: 原图最大团=总结点数-[[补图(补图为二分图)]的最大独立集=最大完全子图的顶点 ...

  9. 51nod 1031+斐波那契和杨辉三角的一些基础知识

    直接斐波那契... #include<stdio.h> #include<queue> #include<string.h> #include<iostrea ...

  10. 51nod 1413

    思路: 直接在串里找个最大的值就好了: #include <cstdio> #include <cstring> #include <cstdlib> #inclu ...