当前位置: 首页 > news >正文

jsp网站开发工具永州企业网站建设

jsp网站开发工具,永州企业网站建设,修改wordpress登录界面,打车类app开发公司文章目录 创建django项目应用app配置pycharm虚拟环境打包依赖 路由传统路由include路由分发namenamespace 视图中间件orm关系对象映射操作表数据库配置model常见字段及参数orm基本操作 cookie和sessiondemo类视图 创建django项目 指定版本安装django#xff1a;pip install dj… 文章目录 创建django项目应用app配置pycharm虚拟环境打包依赖 路由传统路由include路由分发namenamespace 视图中间件orm关系对象映射操作表数据库配置model常见字段及参数orm基本操作 cookie和sessiondemo类视图 创建django项目 指定版本安装djangopip install django3.2 命令行创建django项目 先进入到要保存项目的目录中然后执行django-admin startproject 项目名 可以看到创建了这么些文件: manage.py项目的管理工具wsgi.py提供同步的socket服务asgi.py异步urls.py主路由settings.py配置文件只有一部分程序启动时会先读取django内部的配置再读取该文件的配置 内部配置文件路径 编写示例代码 from django.urls import path from django.shortcuts import HttpResponse# 调此函数会带一个request参数可使用request获取请求数据 def login(request):# django的响应是一个封装的对象return HttpResponse(登录成功)urlpatterns [# path(admin/, admin.site.urls),path(user/login, login) # 只能写函数名 ]运行python manage.py runserver 指定端口运行python manage.py runserver 127.0.0.1:8080 执行运行命令前先进入项目目录 应用app 将项目分成不同的功能模块每个模块对应一个app应用 创建app进入项目目录执行python manage.py startapp 应用名 多app的创建 在项目目录下创建apps目录在apps目录下创建以要创的app名为名称创建目录 执行python manage.py article apps/article 修改该文件内容 注册app 调整示例代码结构 在user应用中的views.py文件编写下列代码 from django.shortcuts import HttpResponsedef login(request):return HttpResponse(login success)def register(request):return HttpResponse(register fail)修改urls.py文件的路由配置 from django.urls import path from user import viewsurlpatterns [# path(admin/, admin.site.urls),path(login/, views.login),path(register/, views.register) ]启动项目访问 配置pycharm 配置pycharm启动django项目 虚拟环境 使用命令行创建虚拟环境python官方用于创建虚拟环境的工具python3.8 -m venv xxx 该命令会基于系统python环境创建出一个虚拟环境xxx为名称或目录 使用第三方工具virtualenv先安装pip install virtualenv 创建virtualenv xxx --pythonpython3.8 激活 win cd venv/Scripts activatemac: source /venv/bin/activate 退出虚拟环境deactivate 打包依赖 pip freeze requirements.txt 安装依赖pip install -r requirements.txt 路由 传统路由 路由系统主要是维护url与函数的映射关系 url中包含参数 path(user/gethead/int:id/, views.get_head)类型 int整数str字符串但不能匹配/slug字母数字下划线-uuiduuid的格式path路径可包含/ path(article/del/int:id/, delete),path(article/del/str:id/, delete),path(article/del/uuid:id/, delete),path(article/del/path:id/, delete),直接在函数中添加参数可获取值 def get_head(request, id):return HttpResponse(id)路由中包含正则path替换为re_path def article(request):id request.GET.get(id)return HttpResponse(id)注意参数id字段要一致 include路由分发 导包include 主路由 from django.urls import path, include# 路由匹配到前缀为user则分发给apps.user中的urlsinclude中为路径字符串path(user/, include(apps.user.urls)),path(article/, include(apps.article.urls))在user应用中创建urls文件然后编写路由规则 urlpatterns [path(add/, views.login) ]效果会先找到主路由user/然后在分发的文件中匹配到add/完整的路由为user/add/ 手动路由分发 path(user/, ([path(del/, views.login),path(insert/, views.insert)], None, None)) # 第一个None为app_name,第二个None为namespace匹配的url为user/del/user/insert/ include的本质 name zs# 相当于导包 from apps.user import urls module importlib.import_module(apps.user.urls) # 也可以使用module.name获取name的值 # 从module中获取name的值如果获取不到则默认为ls n getattr(module, name, ls) n getattr(module, name) # 获取不到会直接报错name 给路由起名字可以通过名字反向生成url path(user/login/, views.login, namev1),path(user/register/, views.register, namev2)def login(request):# 在这个视图里需要重定向到register里就可以不写url直接使用name即可from django.urls import reverse # 需要导包url reverse(v2)return redirect(url) # 重定向里面是url地址使用name反推出的url不用填写真是的url地址namespace 用来辅助name的当出现同名的name时使用name反推出url可能会出现问题这时候就可以使用namespace来区分不同的name path(user/, include(apps.user.urls, namespaceuser))path(login/, views.login, namev1),path(register/, views.register, namev2)def login(request):# 在这个视图里需要重定向到register里就可以不写url直接使用name即可from django.urls import reverse # 需要导包url reverse(user:v1) # namespace名:name名return redirect(url) # 重定向里面是url地址使用name反推出的url不用填写真是的url地址使用namespace时必须提供app_name from django.urls import path from apps.user import viewsurlpatterns [path(login/, views.login, namev1),path(register/, views.register, namev2) ]app_name user如果不提供会报错 也可以主动去进行路由分发 path(user/, ([path(login/, views.login, namev1)], user, user)) # 第一个user为app_name第二个user为namespace路由中尾部的/ 路由中带/但是url不带/访问127.0.0.1:8000/login path(login/, views.login)会发现其实是进行了两次请求第一次找不到路经django自动将/加上再访问一次 这个是由于配置文件中默认APPEND_SLASHTrue导致的 如果想严格控制url可以在settings文件中添加APPEND_SLASHFalse 再进行访问 当前url的匹配对象 通过request.resolver_match获取 def login(request):cur_obj request.resolver_matchprint(cur_obj)return HttpResponse(login)拿到这个有什么用可以做权限处理 path(login/, views.login, nametest)def login(request):permissions [user, article, music] #用户具有的权限都是namecur_obj request.resolver_match.url_name #获取当前请求的nameif cur_obj not in permissions:return HttpResponse(没有权限)print(cur_obj)return HttpResponse(login)视图 一般功能多的时候这样创建视图文件 通过request对象获取请求内容 def login(request):print(request.path_info) # 请求urlprint(request.GET.get(username)) # 获取get请求参数print(request.GET.get(passowrd))print(request.headers) # 请求头 字典类型print(request.COOKIES) # cookie 字典类型print(request.method) # 请求方法print(request.body) # 原始请求体# 获取post请求参数# 只针对body格式为a123babc且content-type为from表单格式(application/x-www-from-urlencoded)print(request.POST.get(username))print(request.POST.get(password))# 获取文件 请求头为multipart/form-datarequest.FILES.get(name1)request.FILES.get(name2)返回数据 返回字符串/字节/文本数据 return HttpResponse(xxx)返回json数据 def hello(request):from django.http import JsonResponseret_dict {code: 200,data: xxx}return JsonResponse(ret_dict)#return HttpResponse(json.dumps(ret_dict)) 使用json库重定向 return redirect(https://www.baidu.com) # 参数为url或者url的name设置响应头 ret HttpResponse(hello world)ret[auto] trueret[name] zsret.set_cookie(key, value)return ret中间件 MiddlewareMixin 在项目根目录下创建middlewares目录在该目录里创建自定义中间件 from django.utils.deprecation import MiddlewareMixinclass MyMiddleware(MiddlewareMixin):def process_request(self, request):print(调用视图前)def process_response(self, request, response):print(调用视图后)return response创建完中间件必须在settings文件中进行注册中间件是以类定义的 当在process_request函数中有返回值的时候那么不会进入视图函数的执行而是接着执行process_response函数 注意路由匹配是在执行完process_request函数后才匹配到的也就是process_request函数的request参数为None process_view # view_func是匹配到的路由函数view_argsview_kwargs是路由的参数def process_view(self, request, view_func, view_args, view_kwargs):print(request, view_func)如果想在前置操作中根据视图函数做一些逻辑可以使用process_view process_exception # 当视图中出现异常时会捕获到def process_exception(self, exception):print(exception)orm关系对象映射 对表的操作表的创建修改删除 对数据的操作增删改查 操作表 在app的models.py文件创建类一个类就对应一个表结构 按照规则创建类 from django.db import models # 生成的表名默认为user_userinfoapp名_类名小写 class UserInfo(models.Model):# 默认会生成一个字增主键idname models.CharField(max_length10)age models.IntegerField()class Meta:db_table userverbose_name 用户verbose_name_plural verbose_name注册app根据注册的app找migrations目录可以将用不到的app去掉避免创建使用不到的表执行命令python manage.py makemigrations 会自动在app目录下的migrations目录下创建一个配置文件 执行命令python manage.py migrate根据配置文件转换sql语句链接数据库执行sql 执行上述命令前先进行下面的数据库配置 数据库配置 先安装链接mysql的库pymysql/mysqlclientpip install pymysql 在settings文件中将默认的数据库配置修改下 DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: blog, # 数据库名USER: root,PASSWORD: 12345678,HOST: 127.0.0.1,PORT: 3306,} }使用pymysql时在settings文件的同级目录init文件中添加如下内容 import pymysql pymysql.install_as_MySQLdb()注意不要手动修改表结构如果要修改可以修改models文件中的字段再执行上述的两条命令 数据库连接池 pip install django-db-connection-pool DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: blog, # 数据库名USER: root,PASSWORD: 12345678,HOST: 127.0.0.1,PORT: 3306,POOL_OPTIONS: {POOL_SIZE: 10, # 最小连接数MAX_OVERFLOW: 10, # 额外增加的连接数RECYCLE: 24 * 60 * 60, # 每个连接最长可以使用多久TIMEOUT: 30, # 无连接时最长等待时间}} }model常见字段及参数 class UserInfo(models.Model):# CharField为字符串max_length为字符串的最大长度verbose_name字段含义默认nullFalse不许为空# 一般null和blank结合使用null指数据库是否为可为空blank为页面是否可为空name models.CharField(verbose_name姓名, max_length10, default无名氏, nullTrue, blankTrue)# db_index表示添加索引unique唯一约束age models.IntegerField(verbose_name年龄, db_indexTrue, uniqueTrue)rage models.BigIntegerField(verbose_name长整型年龄)content models.TextField(verbose_name详情)# auto_now当插入数据不传该字段时会使用当前时间create_data models.DateField(verbose_name日期, auto_nowTrue) # 日期年月日rcreate_data models.DateTimeField(verbose_name时间) # 时间年月日时分秒active models.BooleanField(verbose_name是否)# max_digits总共位数decimal_places小数点后几位salary models.DecimalField(verbose_name余额, max_digits10, decimal_places2)表关系 一对多 class UserInfo(models.Model):用户表name models.CharField(max_length5, verbose_name员工姓名)age models.IntegerField(verbose_name年龄)# ForeignKey外键to表示与哪张表关联to_field表示与哪个字段关联# on_deletemodels.CASCADE表示级联删除models.SET_NULL表示设置为null# models.SET_DEFAULT表示设置默认值# 数据库生成的字段会默认给depart加上_id,depart_iddepart models.ForeignKey(verbose_name部门id,default1, nullTrue, blankTrue, toDepart, to_fieldid, on_deletemodels.SET_DEFAULT) class Depart(models.Model):部门表name models.CharField(verbose_name部门名称)多对多 class UserInfo(models.Model):name models.CharField(max_length5, verbose_name姓名) class MusicInfo(models.Model):title models.CharField(max_length20, verbose_name音乐标题) class UAndM(models.Model):nid models.ForeignKey(toUserInfo, to_fieldid, verbose_name用户id)tid models.ForeignKey(toMusicInfo, to_fieldid, verbose_name音乐id)orm基本操作 单表操作 增 def register(request):username request.POST.get(username)password request.POST.get(password)dict {username: username,password: password}# 方式1# 返回值是以UserInfo这个类创建的对象# user models.UserInfo.objects.create(usernameusername, passwordpassword)user models.UserInfo.objects.create(**dict) # 匹配的参数类型是**kwargs使用字段传参时要带上**print(user.username)print(user.password)# 批量插入models.User.objects.bulk_create(objs[models.User(namezs, age10),models.User(namels, age12)],batch_size2 # 一次提交几条)# 方式2user1 models.UserInfo(usernamezs, password123)user1.save()return HttpResponse(user)删 # 删除# 返回值是受影响的行数n1 models.UserInfo.objects.all().delete()n2 models.UserInfo.objects.filter(usernamezs).delete()更新 # 更新# 返回值是受影响的行数n3 models.UserInfo.objects.all().update(password123)n4 models.UserInfo.objects.filter(usernamezs).update(password123)查询 # 查list models.UserInfo.objects.all() # 返回类型是queryset类似列表,里面存放一个个对象# list.query 可以获取sql语句for obj in list:print(obj.username)list2 models.UserInfo.objects.filter(usernamezs) # 返回类型也是querysetlist3 models.UserInfo.objects.filter(age__gt10) # age10# age__gte10 age10# age__lt10 age10# age__lte10 age10# age__in[10,20,30] age in (10,20,30)# username__contains张 包含 张 %张%# username__startswith张 以 ‘张’ 开头 张%list4 models.UserInfo.objects.filter(usernamezs, password123) # andlist5 models.UserInfo.objects.exclude(usernamezs) # username!zs# 如果查不到数据返回依旧是queryset不过里面没对象[]models.UserInfo.objects.filter(usernamezs) # queryset[obj,obj]models.UserInfo.objects.filter(usernamezs).values(username, passowrd) # queryset[{},{}]models.UserInfo.objects.filter(usernamezs).values_list(username, passowrd) # queryset[(),()]user models.UserInfo.objects.filter(usernamezs).first() # 返回值为对象flag models.UserInfo.objects.filter(usernamezs).exists() # 返回值为true false 是否存在users1 models.UserInfo.objects.all().order_by(id) # 排序 ascusers2 models.UserInfo.objects.all().order_by(-id) # 排序 desc# order_by(-id, age) id desc age asc一对多 def login(request):# 一对多查询# depart models.ForeignKey(toDepart, to_fieldid, on_deletemodels.CASCADE)# 查用户及部门 使用 __v models.User.objects.filter(id1).first()print(type(v.depart)) # 类型为class为Depart的一个实例对象 可以使用depart.title获取字段v3 models.User.objects.filter(id__gt0).select_related(depart)for i in v3:print(i.name, i.age, i.depart.title)v1 models.User.objects.filter(id1).values(name,age,depart__title) # [{},{}]v2 models.User.objects.filter(id2).values_list(name,age,depart__title) # [(),()]return HttpResponse(hh)cookie和session def login(request):res HttpResponse(hello)# path是为了设置那个请求访问时携带上cookie /login domain为了限制域名# 响应头中有setCookie: zs:123,超时时间10s# secureTrue 只有https请求时才携带cookie# httponlyTrue只允许在http中访问res.set_cookie(zs, 123, max_age10, path/, domainbaidu.com, secureFalse, httponlyFalse)# 默认值 浏览器重新打开 / 当前域名 False Falsereturn resdef home(request):cookies request.COOKIES # 获取所有的cookieprint(cookies)cookie1 cookies.get(zs) # 根据键获取值return HttpResponse(cookie1)session配置 # session配置 # 存缓存 SESSION_ENGINE django.contrib.sessions.backends.cache # 保存会话引擎缓存.cache文件.file数据库.db SESSION_CACHE_ALIAS default # 使用哪个缓存保存默认使用default可通过CACHES配置 # 存文件 SESSION_ENGINE django.contrib.sessions.backends.file SESSION_FILE_PATH xxx # 文件路径 # 存数据库 SESSION_ENGINE django.contrib.sessions.backends.db # 必须将app session的注释打开SESSION_COOKIE_AGE 1209600 # 两周超时时间 SESSION_EXPIRE_AT_BROWSER_CLOSE False # 关闭 关闭浏览器cookie过期 SESSION_COOKIE_DOMAIN None # 域名 SESSION_COOKIE_PATH / #路径 SESSION_SAVE_EVERY_REQUEST True # 设置每次请求都保存session SESSION_COOKIE_SECURE False # 是否https传输cookie SESSION_COOKIE_HTTPONLY True # cookie只支持http传输CACHES {default: {BACKEND: django.core.cache.backends.locmem.LocMemCache,},redis: {BACKEND: django_redis.cache.RedisCache,LOCATION: redis://127.0.0.1:6379/1,OPTIONS: {CLIENT_CLASS: django_redis.client.DefaultClient,},}, }注册app(保存在数据库中需要将注释打开)与添加中间件django项目默认自带 def login(request):request.session[user] abc # 设置sessionsession request.session.get(user) # 获取sessiondemo 实现登录效果 def login(request):username request.POST.get(username)password request.POST.get(password)user models.User.objects.filter(usernameusername,passwordpassword).first()if user ! None:request.session[user] userreturn JsonResponse({msg: login success})else:return JsonResponse({msg: login fail}) def home(request):user request.session.get(user)if user ! None:return HttpResponse(success)else :return HttpResponse(fail)script$(#but).click(function(){let username $(#username);let password $(#password);$.ajax({url: /login, //请求后端路径type: post, //请求类型data: {username: username.val(), password: password.val()}, //请求数据json类型)success: function(body){ //回调函数//console.log(typeof body)alert(body.msg)}});}) /scriptsettings文件添加该配置 STATIC_URL /static/ # 浏览器可直接访问静态文件 STATICFILES_DIRS [os.path.join(BASE_DIR, static)] # 存放静态文件的公共文件夹类视图 from django.http import JsonResponse from django.views import View from . import models import jsonclass UserView(View):def get(self, request):# queryset不能参与序列化转为列表users list(models.User.objects.values()) # [{},{}]# users models.User.objects.first() vars(users)可将对象转为字典return JsonResponse(datausers,safeFalse) # safe默认为true只能序列化字典,设置为true可序列化列表元组...def post(self, request):data json.loads(request.body)username data.get(username)password data.get(password)user models.User.objects.create(usernameusername,passwordpassword)return JsonResponse(data{id:user.id,username:username,password:password})from django.urls import path from .views import UserView urlpatterns [path(user/, UserView.as_view()) ]
http://www.hkea.cn/news/14566758/

相关文章:

  • 公司企业网站源码wordpress公众号采集
  • 美图秀秀可以做网站吗wordpress图片变形
  • 上海建网站制茂名网站建设电话
  • 手机主页seo优化流程
  • 温州建设信息网站建设局职责
  • 记事本做网站怎么加图片深圳市福田区住房和建设局
  • 上海工商查询网官方网站中山网站建设的企业
  • python做网站模板建筑培训网首页安全员
  • seo批量建站方法wordpress主题 含演示数据
  • 印刷个性化网站建设的意义建e网全景图合成教程
  • 公司网站建设7个基本流程创建一个软件需要多少钱
  • 专业做影评的网站做网站价格和配置
  • 专业购物网站建设多少钱网站开发英文参考文献2015年后
  • 东营网站开发网站建设从入门到精通 网盘
  • 网站建设胶州家园asp网站建设类论文
  • 一站式织梦网站模板企业门户网站开发费用
  • 龙岩网站排名电商好做吗?
  • 化州市建设局网站建设网站步骤是
  • app开发去哪个网站免费网址申请
  • 汉南网站建设做家乡网站代码
  • 门户网站首页模板下载怎么做一个手机网站
  • 衡水企业做网站推广asp.net 3.5网站开发全程解析
  • 黑色门户网站源码网站开发 加二维扫码
  • 建网站找那家企业好做一个招聘网站需要多少钱
  • 中国建设银行网站企业网银国家建设官方网站
  • 企业进行网站建设的方式有哪些天津做公司的网站
  • 做疏通什么网站推广好重庆专业网站推广平台
  • 广西上林建设局网站网站收缩引擎入口
  • 山西省建设厅网站打不开咖啡网页设计素材
  • 湘潭网站制作建设网站建设跟推广评价指标有什么关系