django学习记录

Posted by Mr.Be1ieVe on Monday, January 1, 0001

调试

python manage.py runserver 127.0.0.1:28000

将现有数据库导入到models.py中

python manage.py inspectdb > app/models.py

js实现定时刷新页面

Ajax轮询,Ajax长轮询和websocket(详细使用)

django shell 调试

python manage.py shell

python小问题

orders_num = ordersdate = orders_car_size = orders_price = []

image-20200322135749091

会指向同一个内存地址QAQ

叫引用赋值

问题解决

访问不到写好的path

urlpatterns = [   path('addUsers/',views.add_users,name='add_users')#api/addUsers
]

检查path(‘path/’)的斜杠

注释掉settings.py中的 MIDDLEWARE 的 ‘django.middleware.csrf.CsrfViewMiddleware’

连接mysql出错

django.db.utils.OperationalError: (2059) 解决办法

orm查询

https://www.cnblogs.com/chenxinming-top/p/9506857.html

引入bootstrap网站错位

可能原本就引入了(XD

异步加载数据

从mysql读取数据,然后放置到echarts中,效果如图

image-20200222230043961

echarts js

<div id="main" style="width: 790px;height:600px;"></div>
    <script type="text/javascript">
      var develop_name_list = {{ develop_name_list|safe }};
      var develop_num_list = {{ develop_num_list|safe }};
      var myChart = echarts.init(document.getElementById('main'));
      var option = {
          grid: {containLabel: true},
          xAxis: {name: '数量'},
          yAxis: {
            type: 'category',
            data: develop_name_list
            },
          series: [
              {
                  type: 'bar',
                  encode: {x: 'amount',y: 'product'},
                  data: develop_num_list
              }
          ]
      };
      myChart.setOption(option);
    </script>

{{ develop_name_list|safe }}|safe是必须的,myChart.setOption(option);也是必须的,并且

yAxis: {
            type: 'category',
            data: develop_name_list
            },

的type:也一定时category==目前仅知道针对这个图可行==

使用bootstrap折叠面板之后在里面放置js不渲染

还没会,无解qaq

python模糊查询%问题

sql = ''' SELECT job_Name,description FROM history
                WHERE job_Name like "%%{}%%" and job_Name like "%%{}%%"'''.format('java','后端')

Get方法

class Scan_Detail(TemplateView):
    template_name = 'scandetails.html'

    def get(self, request, *args, **kwargs):
        self.target = request.GET.get('target')
        self.timestamp = request.GET.get('timestamp')
        return super().get(request, *args, **kwargs)
    
    def get_context_data(self , **kwargs):
        context = super().get_context_data(**kwargs)
        data_list = NetworkSegmentVuln_sql(self.target,self.timestamp)
        return context

image-20200315130344606

接收header或body

 获取正则匹配到的数据,num1未位置参数,num2为命名参数,
def index(request,num2=None, num1=None):
 print(num2)
 # 构造响应数据
 reNT')
 sp = HttpResponse('hello world')
 # 获取请求头
 header = request.META.get('HTTP_USER_AGE)
 # 获取地址
 path = request.path
 # 获取GET后面的数据(获取查询字符串数据)
 para = request.GET()
 # 获取json数据
 json_data = request.body
 data = eval(request.body.decode()).get('asd')
 data1 = json.loads(request.body).get('asd')
 # 获取表单数据
 form_data = request.POST
 # 获取请求方法
 method = request.method
 # 获取文件
 file_obj = request.FILES.get('image')
 return resp

token和cookie

参考资料

大部分api和web应用都用tokens,例如fb,google,推特,gihub

实现方法是JSON Web Tokens

详细-有案例-Django+JWT 实现 Token 认证

理解JWT(JSON Web Token)认证及python实践

python接口自动化(二十)–token登录(详解)

可用库:pyjwt

响应

所有响应包含三部分,状态码 code、数据 data、消息 msg 所有内容都在 data 里,msg 是附加的状态消息

最后用了简单方法:

#后端
def create_token(users_id,users_name):
    payload = {
        "iss": "parkingapp.com",
         "iat": int(time.time()),
         "exp": int(time.time()) + 86400 * 7,
         "users_id": users_id,
         "user_name": users_name,
    }
    token = jwt.encode(payload, 'secret', algorithm='HS256').decode('utf-8')
    json_dict_success = {'code': Httpcode.success,'token': str(token)}
    return JsonResponse(json_dict_success, json_dumps_params={'ensure_ascii': False})
<!-- js -->
$.ajax({
 type: 'POST',
 url: 'http://localhost:8000'+ add_users_api,
 data: {users_name: name,
         users_email: email,
         users_phone: phone},
 success: function(data) {
  if (201 === data.code){
   alert("注册成功!");
   localStorage.setItem("token", data.token);
  } else {
   alert("注册失败,请在检查网络后重试!");
  }
  },
 error: function(data) {
  alert("注册失败,请在检查网络后重试!")
  },
});

识别token

var token = localStorage.getItem('token');
console.log(token);
if (null === token){
 alert("请先登录或注册账户");
}
$.ajax({
 type: 'POST',
 url: 'http://localhost:8000'+ verify_token,
 data: {token: token},
success: function(data){
 alert('验证成功');
},
error: function(data){
 alert(data)
},
}); 
def verify_token(request):
    token = request.POST.get('token',0)
    result = jwt.decode(token, 'secret', algorithm='HS256')

回传数据

一开始是

image-20200322164623665

大佬推荐改成如下图,面向对象

img

问题

前端post数据到后端,后端接收到请求但无数据传递

可能因为跨域

跨越定义 :由于浏览器同源策略,凡是发送请求的url的协议(http和https)、域名(www.example.com,about.example.com)、端口(8010和8020)三者之间任意一个与当前页面地址不同则视为跨域。

https://www.cnblogs.com/randomlee/p/9752705.html

「真诚赞赏,手留余香」

Mr.Be1ieVe's Treasure

真诚赞赏,手留余香

使用微信扫描二维码完成支付