Python django学习

来源:互联网 发布:移动数据 4g开关 编辑:程序博客网 时间:2024/05/28 09:31

url
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
网站的基本要素
1.通过访问不同的url,来访问不同的网页。(用户)
2.通过解析不同的url,来输出(display render)url指向的网页内容。(开发者)
解析:
用户的请求(rquest)->通过访问不同的url
响应的内容,也就是用户看到的(response)->用户最终看到的内容
网站开发(请求->反应)
不同的浏览器对html,css,js这些东西的解析标准是不一样的,所以看到的可能是不同的。
开发者
1.获得请求request
2.解析request(拿到url,解析url,让处理该url的方法去处理request)
3.拼接reponse,返回给用户
4.浏览器获得响应内容,解析html,css,js

all in one
沙盒环境?
django step by step

url
开发逻辑
model
比较有意思的地方
中间层
template
怎么切换不同末班
虚拟环境中安装django

cd /tmpsudo apt-get install python-virtualenvvirtualenv djangoNew python executable in django/bin/pythonInstalling cd /djangoNo such file or directorycd django/ .bin/activate. bin/activatepip install django

开始安装django
结果发现下载太慢了
于是去官网
https://docs.djangoproject.com/en/1.9/topics/install/#installing-development-version
下载了.tar.gz 的安装包
到ubuntu下用命令

#解压tar -xvzf /tmp/pip-w6lgMY-unpack/Django-1.9.4.tar.gzcd Django-1.9.4#看一下安装说明vim INSTALL#进行安装python setup.py install

之后django就成功安装了
建立新项目

django-admin.py startproject xxx#进入xxxcd xxx#然后nano manage.py./manage.py runserver-bash: ./manage.py: Permission deniedchmod -R 777 manage.py./manage.py runserver

然后django正常运行

March 23, 2016 - 19:24:30Django version 1.9.4, using settings 'blog.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CONTROL-C.

由于是在虚拟机(x-shell)中运行,并进不去主页http://127.0.0.1:8000/
所以,需要运行命令
./manage.py runserver X.X.X.X:8000
前面为虚拟机IP,此时即可用浏览器进行访问。
nano urls.py 即可查看urls.py

django_step_by_step
http://www.lhelper.org/dev/django_step_by_step/newtest/doc/
csrf错误
https://docs.djangoproject.com/en/dev/ref/csrf/#ref-contrib-csrf
http://zhidao.baidu.com/link?url=cCWezxm-JEFDddvwzYiUCAepAYwbNJ8BxuVE3DPMlLjloNQd8aIA4mBrJcu8EpLqo63d9xJSiQ3g142_Cxxdqua9tKtABaSj2LpE7vyzz3y
重新进入虚拟环境
cd /tmp/django
. bin/activate
cd /Django-1.9.4/blog
./manage.py runserver 10.24.35.103:8000

1.url
url的设置,通过识别url后缀不同,跳转到不同的页面
主要通过正则匹配比如
这里需要注意的是,后面的执行函数是基于你base路径的,有时候发生找不到view的情况,通常是路径没有设对

urlpatterns = [    url(r'^$', 'blog.hello.index'),    url(r'^blog$', 'blog.views.homec'),    url(r'^blog/topic_(?P<id>[\w]+)$', 'blog.views.homeb'),    url(r'^admin/', admin.site.urls),    url(r'^add/$', 'article.views.add'),    url(r'^list/$', 'article.views.list'),    url(r'^addnum$', 'blog.add.addnum'),]

2.settings
这个包括网页的一些基本设置,比如

#基本路径BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#新建的app需要放到settings中INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    #the new one    'article',]#取消csrf,否则在post时会报错MIDDLEWARE_CLASSES = [    'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'django.middleware.common.CommonMiddleware',#    'django.middleware.csrf.CsrfViewMiddleware',    'django.contrib.auth.middleware.AuthenticationMiddleware',    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',    'django.contrib.messages.middleware.MessageMiddleware',    'django.middleware.clickjacking.XFrameOptionsMiddleware',]设置tempate,调用htmlTEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': ['./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',            ],        },    },]#数据库DATABASES = {    'default': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': '/tmp/sth.db'        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    }}#时间TIME_ZONE = 'UTC'

3.views,存一下可用的方法
e.g.1

from django.http import HttpResponsefrom django.template import Templatefrom django.template import Contextdef home(request):    print request    #return HttpResponse('hey,my world.')    return HttpResponse('home page')def homeb(request,id):    return HttpResponse('hey,my world. id is %s'%id)def homec(request):    """    ???    """    template_str = "My name is {{name}}"    t=Template(template_str)    c=Context({"name":"Stephane"})    t.render(c)    return HttpResponse('aaa%s'%type(t))

e.g.2

#coding:utf-8from django.shortcuts import renderfrom django.shortcuts import render_to_response,HttpResponseRedirectfrom article.models import Article# Create your views here.def list(request):    #id 降序排序    articles = Article.objects.order_by("-id").all()    return render_to_response('list.html',{'article':articles})def add(request):    if  request.method =='POST':            #获取表单内容        content=request.POST.get('content',None)        title=request.POST.get('title',None)        #写入        new=Article(content=content,title=title)        new.save()        #跳转        return HttpResponseRedirect('/list')    return render_to_response('add.html',{'method_str':request.method})

4.models管理数据库中的表和实际变量关联,即通过orm来调用数据库,而不是通过sql
orm 减少写sql出错的概率,而且可以兼容不同的数据库
但是并不一定能生成优化很好的sql语句,所以要养成打印sql的习惯
在models更新表信息之后,需要
在settings中的apps中放入blog.article,然后运行
python manage.py makemigrations
python manage.py migrate
e.g.

from __future__ import unicode_literalsfrom django.db import models# Create your models here.class Article(models.Model):    title = models.CharField(max_length=30)    content = models.TextField()

5 manage.py 这个是用来管理django的脚本,可用help查看都有什么命令

其他基础

对于url调用的方法(views)
一般参数为request 可能为
提交数据 post push
访问数据 get pull

对于模板(html)
渲染模板render_to_response(‘add.html’)
form的最基本参数
action 表单数据提交到url
method 提交的方式post和get
最基本提交元素
input
textarea
radio
select
多行需要闭合标签
imput中最基本元素
name
type 输入类型
可以传入模板一个字典
调用的时候是在html中使用{{key}}
提交时action,代表提交到哪个接口之中

template
http://djangobook.py3k.cn/chapter04/
http://www.newlifeclan.com/symfony/archives/483
环境搭建
http://www.jianshu.com/p/dbc4193b4f95
migrate
http://www.tuicool.com/articles/jAJjma
基本命令
http://www.ziqiangxuetang.com/django/django-basic.html

0 0
原创粉丝点击